MySQL 及 SQL 注入与防范方法

 更新时间:2016年07月05日 11:08:39   投稿:lqh  
本文将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符。解决SQL注入安全的问题解决,希望对大家有所帮助。

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。

1.以下实例中,输入的用户名必须为字母、数字及下划线的组合,且用户名长度为 8 到 20 个字符之间:

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

让我们看下在没有过滤特殊字符时,出现的SQL情况:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

以上的注入语句中,我们没有对 $name 的变量进行过滤,$name 中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。

2.在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是在 SQLite 和 PostgreSQL 是可以同时执行多条SQL语句的,所以我们对这些用户的数据需要进行严格的验证。

防止SQL注入,我们需要注意以下几个要点:

    1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
    2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
    3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
    4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
    5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
    6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

3.防止SQL注入

在脚本语言,如Perl和PHP你可以对用户输入的数据进行转义从而来防止SQL注入。

PHP的MySQL扩展提供了mysql_real_escape_string()函数来转义特殊的输入字符。

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

4.Like语句中的注入

like查询时,如果用户输入的值有"_"和"%",则会出现这种情况:用户本来只是想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"等等;用户要查询"30%"(注:百分之三十)时也会出现问题。

在PHP脚本中我们可以使用addcslashes()函数来处理以上情况,如下实例:

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

addcslashes()函数在指定的字符前添加反斜杠。

语法格式:

addcslashes(string,characters)

参数  描述
string  必需。规定要检查的字符串。
characters  可选。规定受 addcslashes() 影响的字符或字符范围。

相关文章

  • SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志呢
    2012-07-07
  • SqlServer 巧妙解决多条件组合查询

    SqlServer 巧妙解决多条件组合查询

    开发中经常会遇得到需要多种条件组合查询的情况,比如有三个表,年级表Grade(GradeId,GradeName),班级Class(ClassId,ClassName,GradeId),学员表Student(StuId,StuName,ClassId),现要求可以按年级Id、班级Id、学生名,这三个条件可以任意组合查询学员信息
    2012-11-11
  • hive中将string数据转为bigint的操作

    hive中将string数据转为bigint的操作

    这篇文章主要介绍了hive中将string数据转为bigint的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • MySql更新优化策略

    MySql更新优化策略

    数据库优化是一项很复杂的工作,因为这关系到对系统优化的理解。mysql更新优化是程序员必掌握的知识,这篇文章主要介绍mysql更新优化的策略,需要的朋友可以参考下
    2015-08-08
  • SQLServer批量更新两个关联表数据的方法

    SQLServer批量更新两个关联表数据的方法

    这篇文章主要介绍了SQLServer批量更新两个关联表数据的方法,提供了2种关联查询与更新语句的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Zabbix监控SQL Server服务状态的方法详解

    Zabbix监控SQL Server服务状态的方法详解

    这篇文章主要给大家介绍了关于Zabbix监控SQL Server服务状态的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • sql中参数过多利用变量替换参数的方法

    sql中参数过多利用变量替换参数的方法

    工作中遇到一个需求,需要非常多的参数,本文为大家介绍下sql中利用变量替换参数过多的方法,需要的朋友不要错过
    2014-01-01
  • SQLSERVER Pager store procedure分页存储过程

    SQLSERVER Pager store procedure分页存储过程

    SQL SERVER(2005)以上版本可用,相对应的页面逻辑中写的对应调用该存储过程的方法
    2010-06-06
  • 谈谈sqlserver自定义函数与存储过程的区别

    谈谈sqlserver自定义函数与存储过程的区别

    这篇文章主要介绍了谈谈sqlserver自定义函数与存储过程的区别,需要的朋友可以参考下
    2014-09-09
  • 小米正式开源 SQL 智能优化与改写工具 SOAR

    小米正式开源 SQL 智能优化与改写工具 SOAR

    SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能优化与改写工具,由小米运维 DBA 团队出品。下面通过本文给大家分享小米正式开源 SQL 智能优化与改写工具 SOAR,感兴趣的朋友一起看看吧
    2018-11-11

最新评论