magento防止xss攻击

7天成为Magento系统架构师,现在开始学习Magento全栈开发!

《Magento2.X企业级开发实战》

跨站脚本或 XSS 是一种安全漏洞,可以在 Web 应用程序中找到。此漏洞允许攻击者将恶意代码/样式注入用户查看的网页中。Magento扩展开发人员应该意识到这些漏洞,以避免在他们的代码中引入它们。

XSS 漏洞主要分为三种类型:

  • Persisted XSS – 在这种类型的漏洞中,未经验证的数据源来自数据库或后端永久存储。
  • 反射(非持久性)XSS – 当服务器端脚本立即使用 Web 客户端提供的数据来解析并向用户显示页面而没有正确清理请求时,就会发生这种类型的漏洞。
  • DOM XSS – 对于此漏洞,恶意数据不会触及 Web 服务器。相反,它由JavaScript代码完全反映在客户端。
    防止 XSS
    XSS 漏洞可以通过验证和清理用户输入以及在呈现视图(HTML、移动设备)时清理动态值来防止。

输入处理
任何请求数据都可能被攻击者操纵,并且可能包含恶意值,例如:

用控制字符填充的表单域(“<”、“>”等)
标头包含错误 ID
URI 包含虚假的部分/查询参数
篡改的饼干
为了解决这个问题,开发人员必须验证来自请求的任何值。

最好在尽可能接近视图上下文的位置验证/清理值,因为只有这样您才能确定必须对动态值施加的限制,并且不会冒业务需求的安全要求。

从商业角度来看,没有理由< >在用户的“关于我”部分中禁止使用符号。通过在呈现 HTML 时转义控制符号,允许这些字符不会有问题。“关于我”数据可能会通过 RESTful API 传递,这{}可能会导致问题。如果提前清理,用户数据将被损坏并包含 HTML 控制符号 ( < >)。

输出处理
输出处理涉及在使用外部数据源呈现视图之前对可能来自外部数据源的字符串进行清理。这是保护您的扩展免受 XSS 攻击的主要方法。

一般规则是:不要相信动态值。

PHTML 模板
该类\Magento\Framework\Escaper是为.phtml负责生成 HTML 的模板和 PHP 类提供的。它包含适用于各种上下文的 HTML 清理方法。

局部变量在$escaper.phtml 模板中可用。请参阅产品列表模板作为$escaper.phtml 模板中的使用示例。

请参阅模板指南以了解有关 Magento 中模板的更多信息。

使用\Magento\Framework\Escaperor时$escaper:

如果某个方法指示内容被转义,则不要转义:getTitleHtml()、getHtmlTitle()(标题已准备好用于 HTML 输出)
类型转换和 php 函数count()不需要转义(例如echo (int)$var, echo (bool)$var, echo count($var))
单引号输出不需要转义(例如 echo ‘some text’)
不带变量的双引号输出不需要转义(例如 echo “some text”)
对于所有其他情况,使用特定于上下文的转义函数转义数据。
以下代码示例说明了模板中的 XSS 安全输出:

<?php echo $block->getTitleHtml() ?>
<?php echo $block->getHtmlTitle() ?>
<?php echo $escaper->escapeHtml($block->getTitle()) ?>
<?php echo (int)$block->getId() ?>
<?php echo count($var); ?>
<?php echo 'some text' ?>
<?php echo "some text" ?>
<a href="<?php echo $escaper->escapeUrl($block->getUrl()) ?>"><?php echo $block->getAnchorTextHtml() ?></a>

何时使用 Escaper 方法:

案例:HTML 属性中的 JSON

转义方法:escapeHtmlAttr