magento2如何防止csrf攻击

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

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

跨站请求伪造(CSRF)

CSRF 是一种攻击,它诱使用户的浏览器在用户当前已通过身份验证的 Web 应用程序上执行操作。这种攻击可以通过多种方式通过制作表单或资源引用(如 “src” 属性)来实现,这将触发浏览器将请求发送到目标网站,用户可能已经通过身份验证并拥有身份验证 cookie。目标网站会认为此请求是真实的,并会执行操作,例如将资金转入帐户。

防止这些攻击的最有效方法是使用 CSRF 令牌。这些令牌在服务器端生成并插入到表单中。收到表单时,服务器会验证请求中是否包含有效的 CSRF 令牌。

内置 CSRF 保护

框架中内置了反 CSRF 措施,例如 CSRF 令牌。开发人员只需最少的操作即可使这些机制发挥作用。

框架无法确定哪个控制器打算改变状态,因此需要受到保护。开发人员必须通过实现一个或多个 HttpActionInterface 接口来通知框架控制器是否需要保护。在大多数情况下,接受表单的控制器需要 POST 请求,并且必须由 Magento\Framework\App\Action\HttpPostActionInterface 接口标记。这些是不需要额外实现的标记接口。如果控制器至少实现了其中之一,框架将拒绝使用与其中一个接口不对应的 HTTP 方法的请求。对于期望使用除 GET 之外的任何 HTTP 方法的控制器,CSRF 保护机制将变为活动状态。

CSRF 令牌将通过 lib/web/mage/common.js 文件自动添加到所有表单中。如果文件被禁用,您可以通过从 JS 端的全局 FORM_KEY 变量中获取它,或在后端使用 Magento\Framework\Data\Form\FormKey 来手动将 CSRF 令牌添加到表单中。

例外
在某些情况下,控制器可能需要 POST 请求或任何其他非 GET HTTP 方法,但这些请求不应受到 CSRF 的保护。例如,期望来自另一个服务的请求的 webhook。在这种情况下,您可以通过实现 Magento\Framework\App\CsrfAwareActionInterface 接口来禁用控制器的 CSRF 保护。通过这样做,您还可以自定义失败的 CSRF 挑战异常或修改验证逻辑。

如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。