1、为什么会存在这种攻击方式?

  大多数的B/S系统或者C/S系统,都会涉及到数据的存储和交互,数据一般保存在SQL server、Mysql等数据库中。因此,常见的数据交互中,往往需要根据用户输入的信息进行数据库查询等操作:

  (1)用户登录,需要根据用户填写的用户名和密码查询数据库进行校验。

  (2)数据查询,需要根据指定条件过滤对应权限或者范围的数据。

  这些操作一般是由客户端将用户填写的信息提价到web服务器,服务器再转换为相应的sql语句访问数据库。问题就出在服务器转换sql语句的这个过程中。

  

  通常的编程规范都会提醒我们要注意外部输入的数据参数,以免发生一些程序异常。所以,sql注入之所以会存在,其实就是因为程序员在编写web服务端的程序时,没有对客户端提交的参数进行安全检查,导致黑客可以利用这些漏洞来达到自己的目的。

2、什么是SQL注入式攻击?

  SQL注入攻击,就是利用程序漏洞,在输入信息中构造特定的sql语句,来绕过程序的权限、控制程序的后台等等。

  例如用户登录模块,一般要检测用户名(username)和密码(password)

  如果后台的检测sql语句为:select * from users where uname = username and pwd = password

  那么,如果在登录时,构造这样的输入:

  a OR '1'='1'

  b OR '1'='1'

  这样就可能绕过用户校验,不需要知道用户名和密码即可登录系统。

3、如何防御这种攻击?

  说白了,还是安全校验,这应该是一个程序员必须的编程素养。

  通过过滤用户输入中的特定字符,应该可以有效抵御sql注入攻击。

03-13 18:24