SQL注入
SQL Injection,通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL指令,即利用现有应用程序,将恶意SQL命令注入到后台数据库引擎并执行的能力。
原因:没有严格区分程序命令和用户数据(用户输入),导致用户数据被解释成程序命令被恶意执行。
攻
步骤:
- 判断Web环境是否可以SQL注入: 只有对数据库进行动态查询的业务才可能存在SQL注入。
- 寻找SQL注入点;
- 猜解用户名和密码;
- 寻找WEB管理后台入口;
- 入侵和破坏;
参考:
防
- 字符串替换:把危险字符替换成其他字符,但危险字符太多、枚举替换麻烦;
- 字符串限制检测:直接拒绝包含危险字符的输入;
- 存储过程:若存储过程执行由字符串拼接得到的SQL命令,也可能导致SQL Injection;
几种防御方法参见:https://blog.csdn.net/qq_37787456/article/details/71479907
参数化查询
Parameterized Query,最有效防止SQL注入的方法。访问数据库时,在需要用户输入数值/数据的地方,使用Parameter传值而不是将用户输入直接嵌入到语句中。数据库完成SQL指令的编译后,才套用参数执行。用户输入的参数值会当作一个整体处理,而不会用来拼接字符串,不论参数传进去什么样的值都将无法改变编译得到的语法树的结构。
- 参数过滤,防止SQL注入;
- 参数类型为可变长度时,通过指定参数类型及长度可复用查询计划,节省编译时间、提高查询性能;
若参数化查询不能重用执行计划,也有可能出现SQL注入。
参考:
---
纵使山重水复,亦会柳暗花明
sunqh1991@163.com
欢迎关注,互相交流