注入攻击
注入攻击是应用违背了“数据与代码分离原则的”结果
注入攻击的两个条件
- 用户能够控制数据的输入
- 原本要执行的代码,拼接了用户的输入,把数据当做代码执行了
SQL注入
- 要避免Web服务器开启错误回显,将错误信息直接返回
- 还可以盲注,比如注入 “and 1=2”
- Timing Attach,用BENCHMARK函数造成延迟,如果不为真,则该语句很快就执行完
- BENCHMARK()函数,可以让同一个函数执行若干次,使得结果返回的时间比平常要场,通过时间长短的变化,判断出注入语句是否执行成功。
防御SQL注入
要做的事情
找到所有SQL注入漏洞
修补这些漏洞
使用预编译语句
如使用?代替变量使用存储过程
尽量避免在存储过程内使用动态的sql,如果无法避免,应该使用严格的输入过滤或者编码函数来处理用户的输入数据检查数据类型
使用安全函数
数据库应该使用最小权限原则,避免web应用直接使用root、dbowner等高权限账户直接连接数据库
XML注入
与HTML类似,对用书输入数据包含语言本身的保留字符进行转义
代码注入
多吗注入多见于脚本语言
JSP的动态include也能导致代码注入
CRLF注入
CR(\r),LF(\n)
\r\n:换行
通过注入CRLF可能会改变原有的语义,HTTP就是通过“\r\n”来分割的。如果服务器端没有过滤“\r\n”,又把用户输入的数据放在HTTP头中,则有可能导致安全隐患