htmlencoding是一个避免SQL注入攻击的合适解决方案吗?

Mat*_*cey 6 sql security sql-injection

我听说它声称防止SQL注入攻击的最简单的解决方案是在插入数据库之前对所有文本进行html编码.然后,显然,在解压缩时解码所有文本.这个想法是,如果文本只包含&符号,分号和字母数字,那么你就不能做任何恶意的事情.

虽然我看到一些似乎有效的案例,但我预见到使用这种方法时会出现以下问题:

  • 它声称是一颗银弹.可能会阻止此技术的用户理解所有可能的相关问题 - 例如二阶攻击.
  • 它不一定能防止任何二阶/延迟有效负载攻击.
  • 它使用的工具不是为其设计的目的.这可能导致代码的未来用户/开发者/维护者之间的混淆.它也可能与效果的表现相差甚远.
  • 它为每次读取和写入数据库增加了潜在的性能.
  • 它使数据更难直接从数据库中读取.
  • 它增加了磁盘上数据的大小.(每个字符现在约为5个字符 - 反过来,这也可能影响磁盘空间要求,数据分页,索引大小和索引性能等等?)
  • 高范围unicode字符和组合字符存在潜在问题?
  • 一些html [en | de]编码例程/库的行为略有不同(例如,有些编码撇号,有些则没有.可能会有更多差异.)然后将数据绑定到用于读取和写入的代码.如果使用[en | de]编码不同的代码,则可能会更改/损坏数据.
  • 它可能使得处理(或至少调试)任何已经类似编码的文本变得更加困难.

有什么我想念的吗?
这实际上是解决SQL注入攻击问题的合理方法吗?
尝试以这种方式防止注入攻击有任何根本问题吗?

Kla*_*sen 9

你应该通过使用参数绑定来防止sql注入(例如,永远不要将sql字符串与用户输入连接,但是使用占位符作为参数,让你使用的框架做正确的转义).另一方面,Html编码应该用于防止跨站点脚本.