SQL注入是个老话题,前一段中招了,所以总结了些注意事项,可以快速简单的帮助防止大部分的注入攻击
个人觉得参数化和数据库权限是相对简单和有效的方案。
1、Domain Driver Design:
一种设计思想,强调识别可信任和不可信任调用,确认安全防范边界,保证这个边界范围内的操作是可靠的,确保不可靠的调用都在边界外。
比如一个登陆操作,可能涉及对字符或密码合法性验证,再会有登陆验证,安全边界应该放到字符和密码合法性这层,那么所有的登陆调用操作都应该先合法性验证,在登陆验证。
2、参数化语句:
注入是在参数传入过程,加入特别语句,以改变sql语义,达到攻击目的。
而参数化是将sql语义与参数分开。这个一般现有的数据库接口都提供这种访问方式,比如prepare.
代码层的参数化
存储过程层的参数化
HTML5的参数化
3、输入验证
对明确有规范或范围的参数,进行格式化或边界校验。
白名单
黑名单
4、NOSQL的注入防范也要注意。
仍然用参数化封装功能,避免动态字符串拼接。
5、数据库中敏感信息隐藏
比如表名,user,account等,改成其他的
比如列明:passwd,pwd,password等
平台方面:
web应用防火墙(ModSecurity)
入侵检测
错误语句告警。
确保数据库安全:
限制数据库不必要的功能,
清除默认账户
明确数据库帐户权限,控制写权限,
最小化api的帐号权限
web服务
与sql服务分离部署
隐藏错误提示
禁用wsdl
快速应对方案
运行时保护
确保数据库安全
额外的部署