--- title: Cross Site Scripting localeTitle: 跨站脚本 --- ## 跨站脚本 跨站点脚本是Web应用程序中的一种漏洞,由程序员在将输入输出到Web浏览器之前不清理输入(例如,博客上的注释)。它通常用于在Web浏览器中运行恶意javascript以执行攻击,例如在其他恶意操作中窃取会话cookie以获得Web应用程序中的更高级别权限。 ### 示例跨站点脚本攻击 博客允许用户使用HTML标记设置其评论样式,但是为博客提供支持的脚本不会删除` ``` ### 在PHP中保护您的网站免受跨站点脚本攻击 在PHP中,有两个主要功能, `htmlspecialchars()`和`strip_tags()` ,内置以保护自己免受跨站点脚本攻击。 `htmlspecialchars($string)`函数将阻止HTML字符串呈现为HTML并将其作为纯文本显示到Web浏览器。 **htmlspecialchars()代码示例** ```PHP alert('Cross Site Scripting!');"; echo htmlspecialchars($usercomment); ``` 另一种方法是`strip_tags($string, $allowedtags)`函数,该函数删除除已列入白名单的HTML标记之外的所有HTML标记。重要的是要注意,使用`strip_tags()`函数你必须更加小心,这个函数不会阻止用户将javascript包含为链接,你必须自己清理它。 **strip\_tags()代码示例** ```php alert('Cross Site Scripting!');"; $allowedtags = "

"; echo strip_tags($usercomment, $allowedtags); ``` **设置X-XSS保护标头:** 在PHP中,您可以发送`X-XSS-Protection` Header,它将告诉浏览器检查反映的Cross Site Scripting攻击并阻止页面加载。这并不会阻止所有跨站点脚本攻击仅反映出来,并且应该与其他方法结合使用。 ```PHP ``` #### 更多信息: * [OWASP Wiki - 跨站点脚本](https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)) * [php.net strip\_tags()手册](https://secure.php.net/manual/en/function.strip-tags.php) * [php.net htmlspecialchars()手册](https://secure.php.net/manual/en/function.htmlspecialchars.php) * [MDN - 内容安全策略(CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)