如何使用PHP实现OWASP的规则5来缓解XSS


How to implement Rule 5 of OWASP using PHP to Mitigate XSS

OWASP 规则 5有人可以向我解释一下这到底是什么意思以及如何在 PHP 中实现它吗?

不要使用 URL 编码对完整或相对 URL 进行编码!如果不受信任的输入要放入 href、src 或其他基于 URL 的属性中,则应对其进行验证以确保它不会指向意外协议,尤其是 Javascript 链接。然后,应像任何其他数据一样根据显示上下文对 URL 进行编码。例如,HREF 链接中的用户驱动 URL 应进行属性编码。

SO上的这个答案似乎涵盖了其中的一部分:输入是 URL,如何保护它免受 xss 的侵害with makeHTMLAttributeSafe($string) 函数。但是我如何检查它是否是"意外的协议或javascript链接?我应该搜索和替换某些"坏"关键字,如"javascript","script","onload"等吗?没有充分的理由为什么我的任何用户都需要输入这些术语,所以我可以采用一种相当严厉的方法,在必要时删除列入黑名单的术语。我花了很多时间试图理解 xss,非常感谢对此进行一些澄清。谢谢!

名单,不要列入黑名单。总会有您不知道的新协议(例如,iTunes将itms://用于自己的目的)。

选择要在链接中支持的协议(可能是http://https://mailto://,也许是ftp://),并阻止任何以不同协议开头的链接。