如何防止跨站请求伪造攻击?

Cha*_*hak 5 apache perl csrf cgi-application csrf-protection

我们在我们的产品上运行Burp Suite并发现了一些安全漏洞。该工具检测到一些易受跨站请求伪造攻击 (CSRF) 攻击的 CGI 文件。

像往常一样,我在 CPAN 上搜索 CSRF 保护模块并找到了CGI::Application::Plugin::ProtectCSRF

我想知道如何以通用方式将此模块集成到我们的应用程序中?我不清楚文档。如何配置此模块并进行最小更改以确保整个应用程序免受 CSRF 的影响。

我还遇到了mod_csrf(一个防止 CSRF 的 Apache 模块)。在 apache 配置文件中安装此模块和设置是否足以防止 CSRF?

<VirtualHost>

    CSRF_Enable on
    CSRF_Action deny
    CSRF_EnableReferer off

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

Cha*_*hak 0

由于我们使用的是内部服务器,而不是 apache,因此 mod_csrf 无法实现。

由于文档不清楚,我放弃了 ProtectCSRF 模块。

我通过执行以下操作解决了这个问题:

  1. 在标题模板中添加一个所有页面通用的元素,该元素包含从服务器传递的 CSRF 令牌
  2. 创建一个 JavaScript 函数并将其绑定到 onload 事件。该 JS 函数执行以下任务:

    a) 在当前页面查找表单

    b) 如果找到表单,则创建一个隐藏的“输入”元素并将其附加到每个表单

    c) 获取放入 header 中的值并将其分配给上面创建的元素

    d) 现在所有表单都有一个隐藏的输入元素,其中包含来自第 1 点的 CSRF 令牌

  3. 现在,每当提交表单时,这个隐藏元素也将被提交,我们正在服务器端验证其值。如果令牌不匹配,则存在 CSRF,我们会抛出错误并阻止请求