白帽子讲web安全-3.服务器端安全 摘记

注入攻击

注入攻击的本质是把用户输入的数据当作代码执行。有两个关键条件,第一个是用户能够控制输入;第二个是原本要执行的代码拼接了用户输入的数据。

正确防御SQL注入

  • 使用预编译语句。防御SQL注入的最佳方式,通过预编译语句,绑定变量。因为预编译语句的执行方式是命令与数据分离的:先传输SQL语句,再发送参数值。
  • 使用存储过程。但存储过程也可能会被注入。应该尽量避免在存储过程里使用动态SQL语句。
  • 检查数据类型。
  • 使用安全函数。

从数据库自身角度,应该使用最小权限原则,为不同的应用分配不同的帐号和权限,尽量避免使用root账户。

其他注入

  • 标记注入。比如对XML注入特殊的标记,使只有一个元素的变成有两个元素等,篡改了XML的原有意义;CRLF注入,对于以CRLF为分界符的约定或协议,注入CRLF,使协议解析器误认为协议提前结束等。
  • 代码注入。比如Java里的脚本引擎,通过注入代码来执行恶意操作。对于脚本语言要特别注意。

注入小结

在对抗注入攻击时,只需牢记“数据与代码分离原则”,在“拼接”处进行安全检查,就能避免此类问题。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.