web安全漏洞之二——sql注入攻击

1. 什么是sql注入攻击?

       所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

2. sql注入攻击类型?

2.1  没有正确的过滤转义字符

       用户的输入没有进行转义字符过滤,而被传递给SQL语句,从而导致攻击者对数据库的操作,例如:

       SELECT * FROM users WHERE name = ?

       如果用户名name被恶意伪造为:zhang3' or '1'=1

       此时SQL语句就会发生变化:SELECT * FROM users WHERE name = 'zhang3' OR '1'='1';

       因为'1'='1'是正确的,如果这段代码被用语一个认证过程,那么就能强迫选择一个合法的用户名。

2.2  字段类型错误

       如果程序没有实施类型强制,就会发生这种形式的攻击,例如:

       UPDATE subject SET score= ? where name = 'zhang3' 

       如果成绩被恶意伪造为:100; DROP TABLE users #

       此时SQL语句就会发生变化:

       UPDATE subject SET score= 100; DROP TABLE users; # where name = 'zhang3'

       它会将“users”表从数据库中删除

3. 如何防范sql注入攻击?

3.1 使用预编译语句:这是最佳的防SQL注入方式,使用预编译的SQL语句语义不会发生改变,变量使用?表示,攻击者无法改变SQL结构。

3.2 检查数据类型,对用户输入的数据做严格校验,比如只允许输入数字,非数字输入全部认为非法字符。

相关推荐