2011年在PHP中使用XSS的方法?

Ind*_*ial 16 php security xss

我正在努力获得有关可用和适当的反措施的最新信息,这些反措施可以在2011年积极降低被XSS列车撞击的可能性.

我用前所未有的Google搜索,发现网上有大量的库可以帮助解决XSS问题,这些问题自豪地大胆地说" XSS/SQL注入降压停在这里 ".

我发现这些库至少存在以下两种症状之一:

  • 图书馆是如此巨大,以至于它可能拥有它自己的心跳.
  • 图书馆是海滩男孩们在收音机上播放的时候.

PHP已经存在了一段时间,而且远远不够,strip_tags还伴随着诸如此类的功能filter_var.我远非这些安全问题的专家,实在无法确定它是否能确保未来的良好睡眠.

什么是我最好的机会在2011年减少XSS注射而不会使我的代码膨胀,无论是否有过时的库?

Mat*_*nen 7

最好的解决方案是使用模板引擎,除非您明确告诉它,否则不会让您以纯HTML格式输出任何数据.如果你必须手动逃避事情,那就太容易忘记某些事情而让自己对XSS攻击持开放态度.

如果您在没有真实模板的情况下陷入困境,请使用htmlspecialchars().

  • @Sonny:通过转义所有HTML字符,无法进行HTML注入.当然,插入到非HTML上下文中的东西(例如JavaScript)需要一种不同类型的转义函数,但我的观点是简单性和内置性. (3认同)

Zed*_*Zed 5

我不能同意Matti Virkkunen或我认为Matti的回答所暗示的内容,所以让我大声而清楚地说:没有什么能"删除所有恶意代码".您永远不会知道数据将如何在应用程序的其他部分或将来使用.您可以为SQL"净化"它,但是您不应该首先在SQL中放置任何未转义的内容.您可以为HTML"净化"它,但不应包含任何未转换为HTML的数据.您可以"净化"它以包含在shell脚本中的awk参数中,但是......您明白了.

即使是暂停问题也是不可判定的,更不用说任何给定代码或数据的恶意意图了.从长远来看,任何输入"纯化"的方法都是无用的.所需要的是正确的数据转义.总是.因此,如果要在SQL查询中包含任何内容,请将其包含为数据而不是代码.如果要在博客文章中打印用户名,请将其包含为文本而不是HTML.通过查看"Mr. <script> alert('XSS'); </ script>"中的注释,如果用户名是HTML编码的,或者作为文本节点动态添加到DOM中,任何人都不会受到伤害.

所有的自动净化工具只不过是为了使其安全而添加到程序中的神奇尘埃.他们说:"在这里 - 我们已经将您的所有数据都设置为Kosher,因此您现在可以不安全地使用它而不用担心数据边界!" 这只会导致虚假的安全感.我们作为开发人员需要对数据的输出负责,并且从不认为一切都很好,因为我们有一个工具可以使我们的所有数据"安全"无论输入意味着什么.