我已经在我的地方读到,为了防止XSS攻击,最好的做法是首先在用户输入上执行stripslashes
然后htmlspecialchars
。但是,在某些情况下是不可能的,例如在允许用户使用WYSIWYG编辑器进行一些基本标记时。
PHP是否为此提供了任何方法,允许基本标签(b,i,u,a,img,...)的某些白名单,但剥去它们所有潜在危险的参数,以及转义所有html除了属于白名单标签的<
,>
和"
之外的特殊字符&amp;标签参数?
或者我应该忘记这样做并切换到另一种方法,例如使用BBcode为用户输入标记?
答案 0 :(得分:1)
除了之外,您还应在输出富文本的任何页面上实施Content Security Policy,以便使用HTML Purifier等清理程序使文本对HTML输出安全。这应该可以有效地防止注入的脚本命令运行。
CSP允许您有效地阻止内联脚本被浏览器执行。它目前是supported by现代浏览器,例如Chrome和Firefox(尽管IE目前只有部分支持)。
这是通过页面中的HTTP响应标头完成的。
e.g。
Content-Security-Policy: script-src 'self' https://apis.google.com
如果用户设法将JavaScript注入到您的页面中,将停止执行内联JavaScript(它会被警告忽略),但会允许脚本标记引用您自己的服务器或https://apis.google.com
。这可以根据需要定制。对于不支持CSP的浏览器,仍然需要HTML清理程序,因此您仍然应该首先运行所有用户提供的输入。