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

时间:2009-05-08 21:44:18

标签: perl apache csrf

是否有可以使用的透明库或简单的东西,所以我可以使用Perl和Apache阻止cross-site request forgery (CSRF)?如何为表单生成令牌并在服务器端验证它们?

2 个答案:

答案 0 :(得分:9)

看看CGI::Application::Plugin::ProtectCSRF的作用。该模块用于CGI :: Application框架。

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

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

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

答案 1 :(得分:1)

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

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