如何防止SQL注入

Posted tiankc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防止SQL注入相关的知识,希望对你有一定的参考价值。

什么是SQL注入?

 SQL Injection 就是利用
某些数据库的外部接口将用户数据插入到实际的数据库操作语言(SQL)当中,从而达到入
侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行严格的
过滤,导致非法数据库查询语句的执行 。

SQL注入的危害

  SQL 注入(SQL Injection)攻击具有很大的危害,攻击者可以利用它读取、修改或者
删除数据库内的数据,获取数据库中的用户名和密码等敏感信息,甚至可以获得数据库管理
员的权限,而且,SQL Injection 也很难防范。网站管理员无法通过安装系统补丁或者进行简
单的安全配置进行自我保护,一般的防火墙也无法拦截 SQL Injection 攻击

防止SQL注入方法
  1、JavaJSP 开发的应用,可以使用 PrepareStatement+Bind-variable 来防止 SQL 注入

String sql = "select * from users u where u.id = ? and u.password = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,pwd);

resultset rs = ps.executequery();

  2、使用应用程序提供的转换函数

  很多应用程序接口都提供了对特殊字符进行转换的函数,恰当地使用这些函数,可以
防止应用程序用户输入使应用程序生成不期望的语句。
   mysql C API:使用 mysql_real_escape_string() API 调用。
   MySQL++:使用 escape quote 修饰符。
   Perl DBI:使用 placeholders 或者 quote()方法。
  Ruby DBI:使用 placeholders 或者 quote()方法

  3、自己定义函数进行校验
  整理数据使之变得有效;
  拒绝已知的非法输入;
  只接受已知的合法输入。
  所以如果想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改
变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验
证。
  下面采用正则表达式的方法提供一个验证函数,以供大家参考。
已知非法符号有:

“’”“;”“=”“(”“)”“/*”“*/”“%”“+”“”“>”“<”“--”“[”“]”
其实只需要过滤非法的符号组合就可以阻止已知形式的攻击,并且如果发现更新的攻
击符号组合,也可以将这些符号组合增添进来,继续防范新的攻击。特别是空格符号和与其
产生相同作用的分隔关键字的符号,例如“/**/”,如果能成功过滤这种符号,那么有很多
注入攻击将不能发生,并且同时也要过滤它们的十六进制表示“%XX”。
由此可以构造如下正则表达式:
(|‘|(\%27)|;|(\%3b)|=|(\%3d)|(|(\%28)|)|(\%29)|(/*)|(\%2f%2a)|(*/)|(\%2a%2f)|+| (
%2b)|<|(\%3c)|>|(\%3e)|(--))|[|\%5b|]|\%5d)



































以上是关于如何防止SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis怎么防止SQL注入

MyBatis怎么防止SQL注入

在asp中加入了防止sql注入代码 如何输入符号

什么是sql注入如何防止sql注入

如何防止 SQL 注入?

如何防止代码注入攻击在PHP