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注入。

SQL注入防范之参数化查询参数化查询理解

 


 参考

posted @ 2016-10-18 22:54  万箭穿心,习惯就好。  阅读(240)  评论(0编辑  收藏  举报