SQL注入的根源
造成SQL注入的根源是把用户输入的数据作为程序逻辑的一部分。例如,很常见的做法就是:将用户的输入和SQL语句进行拼接,最终导致了用户的输入变为了SQL语句的一部分
SQL注入的防范原则
因此,防范SQL注入的一个很重要的原则就是:让数据只是数据,尽量不要使用用户输入的数据来构造SQL语句。
当然,SQL注入如此盛行的另外一个重要原因是,充满想象力的恶意输入。
SQL注入的防范办法
 

1)      使用parameter参数化的查询

使用参数化查询,自然避免了使用拼接字符串以构造SQL语句,因此也把用户的输入和程序的逻辑分离开了。另外,也有了强类型的检查。不用再担心单引号和分号等等“非法”字符了。
2)在存储过程中使用参数化输入  

如果使用存储过程,则应使用参数作为存储过程的输入。

利用存储过程来防范SQL注入,也依赖于使用的方式,如果又重回到了拼接字符串,依然可能存在SQL注入
 对于存储过程,只要赋予数据库用户对存储过程最小的权限就可以了,一般来说,就是执行的权限

3)      严格验证用户输入

越严格越好,比如不光是过滤或escape/encode一些常见的非法字符,而是只允许输入符合要求的字符,比如对于id,可能就是0-9的数字,等等。

4)      不暴露任何错误消息

攻击者们总是喜欢通过错误信息以判断是否存在SQL注入的问题,另外也通过错误信息以获得进一步的信息。一个好的做法是,一旦出错,就跳转到自定义的错误页面。

5)      配置安全的数据库

本着深度防守的原则,数据库的安全配置也是很重要的一环。比如,即使有SQL注入的问题,但是程序里数据库用户的权限极低,这样也可以把影响降到最低。这里可能有很多的tips,比如

a.       尽可能少的权限,

b.       把管理的帐号的程序使用的帐号分开

c.       去掉一些危险的扩展存储过程,比如SQL Server里面的xp_cmdshell

d.       打好补丁

e.       数据库的密码不要放在配置文件里


欢迎各位同仁赐教,补充!共同学习,大家好才是真的好!
posted on 2008-06-03 11:42  午夜香吻  阅读(405)  评论(0)    收藏  举报