注入攻击
注入攻击的本质是把用户输入的数据当作代码执行。有两个关键条件,第一个是用户能够控制输入;第二个是原本要执行的代码拼接了用户输入的数据。
正确防御SQL注入
- 使用预编译语句。防御SQL注入的最佳方式,通过预编译语句,绑定变量。因为预编译语句的执行方式是命令与数据分离的:先传输SQL语句,再发送参数值。
- 使用存储过程。但存储过程也可能会被注入。应该尽量避免在存储过程里使用动态SQL语句。
- 检查数据类型。
- 使用安全函数。
从数据库自身角度,应该使用最小权限原则,为不同的应用分配不同的帐号和权限,尽量避免使用root账户。
其他注入
- 标记注入。比如对XML注入特殊的标记,使只有一个元素的变成有两个元素等,篡改了XML的原有意义;CRLF注入,对于以CRLF为分界符的约定或协议,注入CRLF,使协议解析器误认为协议提前结束等。
- 代码注入。比如Java里的脚本引擎,通过注入代码来执行恶意操作。对于脚本语言要特别注意。
注入小结
在对抗注入攻击时,只需牢记“数据与代码分离原则”,在“拼接”处进行安全检查,就能避免此类问题。
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。