当前位置:主页 > mysql教程 >

浅析MySQL的注入安全问题

发布:2022-10-27 09:31:49 169


本站精选了一篇MySQL相关的编程文章,网友文和泽根据主题投稿了本篇教程内容,涉及到MySQL、注入相关内容,已被627网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

如果把用户输入到一个网页,将其插入到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修改数据库默认路径无法启动问题

    发布:2020-01-19

    这篇文章主要给大家介绍了关于mysql修改数据库默认路径无法启动问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着


  • Python配置mysql的详细步骤方法

    发布:2020-05-28

    下面小编就为大家带来一篇Python配置mysql的教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • CentOS6.5 安装 MySQL5.1.71的步骤

    发布:2021-05-28

    这篇文章主要介绍了CentOS6.5 安装 MySQL5.1.71的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下


  • 介绍MySQL实现查询本周、上周、本月、上个月份数据的sql代码

    发布:2020-02-09

    MySQL查询的方式很多,下面为您介绍的MySQL查询实现的是查询本周、上周、本月、上个月份的数据,如果您对MySQL查询方面感兴趣的话,不妨一看


  • Java程序使用MySQL时返回参数为乱码的解决方案大全

    发布:2020-01-07

    这篇文章主要介绍了解决Java程序使用MySQL返回参数为乱码的问题的教程,通过示例来讲解utf-8编码在MySQL中的相关配置,示例需要的朋友可以参考下


  • 《PHP和MySQL Web开发》知识点总结(三)

    发布:2018-08-17

    前言 本篇文章简要叙述了PHP中数组的使用,主要包括数组(数字索引数组,关联数组,多维数组)的创建,访问以及数组的一些其他常用函数。 数组的分类 在C语言中常见的数组叫做数字索引数组,PHP中还有关联数组,也就是说数组的索引可以是一个字符串,这样更有利于表现数组中元素值的意义。 如: $person = array();$person[name] = Tom;$person[age] = 18; 当数组的元素值还是数组时,就


  • Mysql5如何升级到Mysql5.5

    发布:2020-02-01

    这篇文章主要介绍了Mysql5升级到Mysql5.5的方法的相关资料,需要的朋友可以参考下


  • MySQL表字段设置默认值的方法

    发布:2020-01-17

    默认值的设置很重要,比如在插入的时候一些字段是可以省略的,这会带来很多的方便,接下来将要介绍MySQL表字段设置默认值感兴趣的你可以千万不要走开啊,希望本文对你有所帮助


网友讨论