推荐:SQL注入攻防入门 http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html
sql注入 工具 http://blog.jobbole.com/17763/
“SQL注入天书”作者自己提供的终极防范方案就是 replace("'","''")。并且在参数前后加单引号。也可防止16进制注入
select * from table1 where id=1;(declare @d varchar(8000) set @d=0x27eeadf...)
我们用单引号替换法修改后最终执行的sql如下:
select * from table1 where id=‘1;(declare @d varchar(8000) set @d=0x27eeadf...;)’
可以看到1;(declare @d varchar(8000) set@d=0x27eeadf...;) 被当做字符串处理,而不会被解析
当然这个过程中没有替换单引号。 如果declare 后面有单引号的话 还要把单引号替换成两个单引号(不替换的话会有被截断、注入的可能),比如:
select * from table1 where id=1;(declare @d varchar(8000) set @d=‘eee’)
我们用单引号替换法修改后最终执行的sql如下:
select * from table1 where id=‘1;(declare @d varchar(8000) set @d=''eee'')'
1) 在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。(也就是参数化)
2) 在部署你的应用前,始终要做安全审评(security review)。
3) 千万别把敏感性数据在数据库里以明文存放。
4) 确认你编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。
5) 锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。