码迷,mamicode.com
首页 > 数据库 > 详细

如何防止SQL注入

时间:2018-09-16 15:25:20      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:应用   hold   自我保护   防止   bin   就是   表达   perl   校验   

什么是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注入

标签:应用   hold   自我保护   防止   bin   就是   表达   perl   校验   

原文地址:https://www.cnblogs.com/tiankc/p/9655340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!