sql防注入总结
如何预防SQL注入?
1. 严格限制Web应用的数据库的操作权限,给此用户提供仅仅能满足其工作的最低权限, 从而最大限度的减少注入攻击对数据库的危害
2. 检查输入的数据是否具有所期望的数据格式,严格限制变量的类型,例如使用regexp
包进行一些匹配处理,或者使用strconv包对字符串转化成其它基本类型的数据进行判 断
3. 对进入数据库的特殊字符('”\尖括号&*;等)进行转义处理,或编码转换
4. 所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是 将用户输入变量嵌入到SQL语句中,即不要直接拼接SQL语句。例如使用database/sql 里面的查询函数Prepare和Query,或者Exec(query string, args ...interface{} )
5. 在应用发布之前建议使用专业的SQL注入检测工具进行检测,以及时修补被发现的SQL 注入漏洞。网上有好多这方面的开源工具,例如sqlmap、SQLninja等
6. 避免网站打印出SQL错误信息,比如类型错误、字段不匹配等,把代码里的SQL语句 暴露出来,以防止攻击者利用这些错误信息进行SQL注入
数据库内部处理:如何解析SQL语句并如何生成执行计划?
1. 解析
step1: 检查共享池中是否有之前解析相同的SQL语句所存储的SQL文本,解析树和 执行计划。如果能找到对应的执行计划,直