如何在我的 OpenCart 2.3 在线商店中添加 XSS 保护
How do I add XSS protection on my OpenCart 2.3 online store
我们在 Amazon Web Services 中托管了一个 OpenCart 2.3。我们已经采取措施来防止 XSS,即我们在 AWS set-up 上激活了 XSS 保护。在 Google Chrome 上,您将看到我们的 header:
X-XSS-Protection:1; mode=block
我做的一个测试是在结帐评论中输入以下内容:
<html>
<script>Alert('hello world')</script>
</html>
结帐时,没有显示任何警报,意思是脚本没有执行?我检查了数据库,发现标签已编码,例如存储为 这应该意味着我们的网站受到了 XSS 保护?
我们还可以采取哪些其他措施来全面防范 XSS
X-XSS-Protection
header 并不像您想象的那样。请参阅 What is the http-header "X-XSS-Protection" 了解它的一个很好的 SO 概述。但 tl;dr 是它在 IE8+ 上启用了某些行为。
更广泛地说,XSS 就其本质而言,不是您可以通过一个单一的操作来防范的。每次接收一些用户输入时,您都必须格外小心,以验证它是否符合您希望的格式。无论何时向用户呈现该输入,您都必须正确处理它,以便恶意脚本不会在该用户的上下文中执行,并且会做 坏 事情。
OWASP 有一个很好的 XSS prevention cheatsheet 这是一个非常好的资源。
但是,原则上,始终根据要显示的区域转义 user-supplied 输入。例如,如果用户为购物项目的标题提供了一些文本,那么它应该是 just 文本,并用在期望 [=] 的 HTML 元素中25=]just 文本(例如 inline 元素之一)和 HTML-escaped 等。另一方面,如果用户提供了 URL,则应该在 URL 有效的上下文中使用(例如,作为图像的来源)和 URL-escaped。避免让用户提供自己的 HTML、CSS 或脚本。并避免在脚本中放置 user-supplied 值,CSS 等
最后,由于您使用的是 OpenCart,因此您可以从其他人已经完成的大量工作中获益。因此,除非您正在做一些事情 extra-custom 并尝试使用框架的内部位,否则您可能不会 运行 进入深水区。当然,还要遵循框架内的约定。
我们在 Amazon Web Services 中托管了一个 OpenCart 2.3。我们已经采取措施来防止 XSS,即我们在 AWS set-up 上激活了 XSS 保护。在 Google Chrome 上,您将看到我们的 header:
X-XSS-Protection:1; mode=block
我做的一个测试是在结帐评论中输入以下内容:
<html>
<script>Alert('hello world')</script>
</html>
结帐时,没有显示任何警报,意思是脚本没有执行?我检查了数据库,发现标签已编码,例如存储为 这应该意味着我们的网站受到了 XSS 保护?
我们还可以采取哪些其他措施来全面防范 XSS
X-XSS-Protection
header 并不像您想象的那样。请参阅 What is the http-header "X-XSS-Protection" 了解它的一个很好的 SO 概述。但 tl;dr 是它在 IE8+ 上启用了某些行为。
更广泛地说,XSS 就其本质而言,不是您可以通过一个单一的操作来防范的。每次接收一些用户输入时,您都必须格外小心,以验证它是否符合您希望的格式。无论何时向用户呈现该输入,您都必须正确处理它,以便恶意脚本不会在该用户的上下文中执行,并且会做 坏 事情。
OWASP 有一个很好的 XSS prevention cheatsheet 这是一个非常好的资源。
但是,原则上,始终根据要显示的区域转义 user-supplied 输入。例如,如果用户为购物项目的标题提供了一些文本,那么它应该是 just 文本,并用在期望 [=] 的 HTML 元素中25=]just 文本(例如 inline 元素之一)和 HTML-escaped 等。另一方面,如果用户提供了 URL,则应该在 URL 有效的上下文中使用(例如,作为图像的来源)和 URL-escaped。避免让用户提供自己的 HTML、CSS 或脚本。并避免在脚本中放置 user-supplied 值,CSS 等
最后,由于您使用的是 OpenCart,因此您可以从其他人已经完成的大量工作中获益。因此,除非您正在做一些事情 extra-custom 并尝试使用框架的内部位,否则您可能不会 运行 进入深水区。当然,还要遵循框架内的约定。