如何使用 Perl 和 Apache 防止跨站点请求伪造?

发布于 2024-07-21 00:31:19 字数 176 浏览 6 评论 0原文

是否有任何我可以使用的透明库或简单的库,以便我可以防止 跨站点请求伪造(CSRF ) 使用 Perl 和 Apache? 如何为表单生成令牌并在服务器端验证它们?

Are there any transparent library that I can use or something easy so I can prevent cross-site request forgery (CSRF) with Perl and Apache? How can I generate tokens for forms and validating them server-side?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

合约呢 2024-07-28 00:31:19

看看 CGI::Application::Plugin::ProtectCSRF< /a> 确实如此。 该模块适用于 CGI::Application 框架。

为其他框架修改模块应该不会太难。
基本上,用户表单获得一个隐藏的 HTML 字段,其中添加了生成的令牌,并且会话对象获得相同的令牌。 提交表单时,会将表单提交的令牌与会话对象(位于服务器上)中的令牌进行比较。 如果它们不匹配,则可能发生了 CSRF。

还有一个 Catalyst 插件: Catalyst::Controller::RequestToken

这些模块使用属性处理程序,因此只需对现有应用程序进行很少的修改。

Have a look at what CGI::Application::Plugin::ProtectCSRF does. This module is for the CGI::Application framework.

It shouldn't be too hard to modify the module for other frameworks.
Basically, user forms get a hidden HTML field added with the generated token, and the session object gets the same token. When the form is submitted, the form-submitted token is compared to the token in the session object (which is on the server). If they don't match, a CSRF has likely occurred.

There is also a Catalyst plugin: Catalyst::Controller::RequestToken

These modules use attribute handlers so there is very little modification required to your existing app.

隱形的亼 2024-07-28 00:31:19

为了防止服务器端的“跨站点请求伪造”,最好:

  1. 使用 HTML 转义。 如果您使用某些模板系统(例如 Template Toolkit),则应该使用其转义功能。 如果您使用 CGI.pm,它有“escapeHTML”子程序可以执行此操作。
  2. 将会话 cookie 的生命周期限制在相对较短的时间内。 对于 CGI::Session 可以使用 $session->expire($time) 来完成。
  3. 输出易受攻击的页面时检查引用者。
  4. 不要使用/接受 GET 请求来修改数据。

这样做是特定于框架的,但很简单。

To protect from "Cross-site request forgery" from server side, it is best to:

  1. Use HTML escape. If you use some template system like Template Toolkit, you should use its escape capabilities. If you use CGI.pm, it has "escapeHTML" sub to do this.
  2. Limit life time of session cookies to relatively short periods. For CGI::Session it can be done with $session->expire($time).
  3. Check referer when outputting vulnerable pages.
  4. Don't use/accept GET request to modify data.

Doing this is framework specific but simple.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文