浅析MySQL的注入安全问题

 更新时间:2015年05月27日 10:51:24   投稿:goldensun  
这篇文章主要介绍了浅析MySQL的注入安全问题,文中简单说道了如何避免SQL注入敞开问题的方法,需要的朋友可以参考下

如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开。这一课将教如何帮助防止这种情况的发生,并帮助保护脚本和MySQL语句。

注入通常发生在处理一个用户输入,如他们的名字,而不是一个名字,他们给一个会在不知不觉中你的数据库上运行的MySQL语句。

永远不要信任用户提供的数据,只能验证后处理这些数据,作为一项规则,这是通过模式匹配。在下面的例子中,用户名被限制为字母数字字符加下划线的长度在8到20个字符之间 - 根据需要修改这些规则。

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
  $result = mysql_query("SELECT * FROM users 
             WHERE username=$matches[0]");
}
 else 
{
  echo "username not accepted";
}

为了说明这个问题,认为这是摘要:

// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

函数调用应该是从用户表中的名称列的名称相匹配用户指定的检索记录。在正常情况下,名称只包含字母数字字符或空间,如字符串髂骨。但在这里,给$name通过附加一个全新的查询,调用数据库变成灾难:注入DELETE查询删除用户的所有记录。

幸运的是,如果使用MySQL,在mysql_query()函数不会允许查询堆叠,或在一个单一的函数调用执行多个查询。如果尝试到堆放查询则调用失败。

其他PHP数据库扩展,如SQLite和PostgreSQL则愉快地进行堆查询,执行在一个字符串中的所有的查询,并创建一个严重的安全问题。
防止SQL注入:

可以处理所有的转义字符巧妙的脚本语言,比如Perl和PHP。 PHP的MySQL扩展提供的函数mysql_real_escape_string()输入到MySQL的特殊字符进行转义。

if (get_magic_quotes_gpc()) 
{
 $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

LIKE困境:

为了解决的LIKE问题,一个自定义的转义机制必须用户提供的%和_字符转换成文字。使用addcslashes()函数,让可以指定一个字符范围转义。

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");


相关文章

  • 解决mysql的int型主键自增问题

    解决mysql的int型主键自增问题

    这篇文章主要介绍了解决mysql的int型主键自增问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Linux下编译安装Mysql 5.5的简单步骤

    Linux下编译安装Mysql 5.5的简单步骤

    Linux下面因为从MySQL 5.5开始使用cmake来做config了,所以编译安装的会和5.1版本有些区别。不过总体来说还是差别不大
    2015-08-08
  • 简述MySQL与Oracle的区别

    简述MySQL与Oracle的区别

    Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高
    2017-06-06
  • 跳槽必备之你设计索引的原则是什么?怎么避免索引失效?

    跳槽必备之你设计索引的原则是什么?怎么避免索引失效?

    索引的设计可以遵循一些已有的原则,创建索引的时候请尽量符合这些原则,便于提升索引地使用效率,更高效地使用索引。今天给大家介绍跳槽必备之你设计索引的原则是什么?怎么避免索引失效?感兴趣的朋友一起看看吧
    2021-05-05
  • MySQL中进行跨库查询的方法示例

    MySQL中进行跨库查询的方法示例

    这篇文章主要给大家介绍了关于MySQL中进行跨库查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • Mysql InnoDB B+树索引目录项记录页管理

    Mysql InnoDB B+树索引目录项记录页管理

    这篇文章主要为大家介绍了Mysql InnoDB B+树索引目录项记录页管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • MySQL中order by排序语句的原理解析

    MySQL中order by排序语句的原理解析

    这篇文章主要介绍了MySQL中order by排序语句的原理,本文结合示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Windows下MySQL 8.0.29 安装和删除图文教程

    Windows下MySQL 8.0.29 安装和删除图文教程

    这篇文章主要为大家详细介绍了Windows下MySQL 8.0.29 安装和删除图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • MySQL 8.0 可以操作 JSON 了

    MySQL 8.0 可以操作 JSON 了

    这篇文章主要介绍MySQL 8.0 如何操作 JSON ,经过漫长的测试,即将整体迁移至Mysql8.0; Mysql8.0 对于Json操作新增/优化了很多相关Json的API操作; 阅读了一下官方文档,虽然绝大多数的JSON操作都是应用层完成,下面来看文章的详细内容吧
    2021-10-10
  • MySQL中的用户创建与权限管理

    MySQL中的用户创建与权限管理

    这篇文章主要介绍了MySQL中的用户创建与权限管理,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论