Stack Exchange 站点如何保护自己免受 XSS 攻击?

信息安全 xss javascript html
2021-08-17 18:54:34

在我看来,因为用户可以使用 HTML 标记(可能是<script>标签)在其中发布问题和评论,Stack Exchange 站点将非常容易受到 XSS 攻击。他们如何防止这种情况?

2个回答

对于一般注释,脚本标签被正确转义,因此它只是被解释为文本而不是实际代码。在这种情况下,这种事情是通过一种称为 HTML 编码的东西来处理的,在这种情况下,您的<script>标签将被转换&lt;script&gt;为文本字符串并呈现为文本字符串,而不是解释为代码。

也就是说,StackOverflow 开发了一项新功能,允许在人们的答案中执行可执行的 javascript:http: //blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/

我想强调的文章中的一些安全要点:

堆栈片段安全吗?

是的,一般来说网络是安全的。在浏览任何启用了 JavaScript 的网站时,您不会比您面临更多的危险。话虽如此,这些片段正在您的浏览器中运行客户端代码,在运行其他用户提供的代码时,您应该始终保持谨慎。我们从我们的网站中隔离片段以阻止访问您的私有 Stack Exchange 数据:

•我们使用HTML5 沙盒iframe 来防止多种形式的恶意攻击。

•我们在外部域(stacksnippets.net)上呈现片段,以确保同源策略无效并防止片段访问您登录的会话或cookies。

与我们网站的所有其他方面一样,Stack Snippets 最终由社区管理。因为用户仍然可以编写代码来创建诸如无限循环或弹出窗口之类的烦人行为,所以我们会在任何被严重低估的帖子上禁用片段(在 Stack Overflow 上得分低于 -3,在 Meta 上得分低于 -8)。如果您看到您认为应该禁用的错误代码,请对帖子投反对票。如果您看到旨在有害的代码(例如网络钓鱼尝试),您应该将其标记以引起版主注意。

这是通过清理用户输入的数据并将其转换为安全格式以在屏幕上显示来完成的。本质上,您接受用户输入并将特殊字符(<、>、/、\ 等)转换为 html 实体,这使得它们在网页上显示时无害。