深入浅出MYSQL研究--SQL注入防范

来源:互联网 发布:云计算股票代码 编辑:程序博客网 时间:2024/04/19 08:03

     在平常的开发中,程序员更加关注SQL是否能够实现预期的功能,客户更加的注重sql的安全问题.实际上,如果SQL语句写作不当,将会给系统造成很大的安全隐患,其中最常见最重要的就是SQL注入.

.简介

     在刚开始学习数据库的时候,我们就知道SQL(结构化查询语言)是一种用来和数据库交互的文本语言,也可以说SQL是一种文本语言的标准.SQL Injection(SQL注入)就是利用某些数据库的外部接口将用户数据插入到实际的数据库操作语言中,从而达到入侵数据库乃至操作系统的目的.它的产生是由于程序对用户输入的数据没有进行严格的过滤,导致非法数据查询语句的执行.

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

 

.常用攻击语句

SQL注入语句:

$username =1'or'1'='1

$password=1'or'1'='1

把整个语句拼接起来就是:

SELECT * FROM UsersWHERE Username='1' OR '1'='1' AND Password='1'OR '1'='1

 

     因为 1'or'1'='1 的值是true,那么查询语句变成了SELECT * FROM Users,把用户名全部查询出来了,那么就可以登入了.

.应对措施

1.PrepareStatement+Bind-variable

     Java,JSP开发的应用,可以使用PrepareStatement+Bind-variable来防止SQL注入,尽量不要使用拼接的SQL语句.

2.使用封住好的转换函数

     很多应用程序接口都提供了对特殊字符进行转换的函数,恰恰地使用这些函数,可以防止应用程序用户输入使应用程序生成不期望的语句.

MySQL C API :使用mysql_real_escape_string() API调用

3.自定义函数校验

     如果现有的函数仍然满足不了要求,则需要自定义函数进行校验,输入校验是一个很复杂的问题,输入验证的途径可以分为以下几种:

  • 整理数据使之变得有效
  • 拒绝已知的非法输入
  • 只接受已知的合法输入

     如果你想获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改变的书进行简单分类,分别应用正则表达式来对用户提供的输入数进行严格的检测和验证.

 

.总结

     SQL注入防范不仅仅应用于MYSQL数据库,一些原理以及解决方案同样适用于其他数据库系统,因为SQL注入问题是一个数据库应用普遍存在的安全问题.

     作为一个程序员,不单单要懂得如何用sql语句实现预期的效果,更要懂得如何写一段安全的SQL语句.让你的网站更加的安全.做软件的宗旨是全心全意为人民服务,做一款让客户用得放心的软件,才是真正的成功.

0 0
原创粉丝点击