是否有任何我可以使用的透明库或一些简单的库,以便我可以使用Perl 和 Apache防止跨站点请求伪造 (CSRF) ?如何为表单生成令牌并在服务器端验证它们?
问问题
3094 次
2 回答
9
看看CGI::Application::Plugin::ProtectCSRF做了什么。该模块适用于 CGI::Application 框架。
为其他框架修改模块应该不会太难。基本上,用户表单获得了一个隐藏的 HTML 字段,其中添加了生成的令牌,会话对象获得了相同的令牌。提交表单时,会将表单提交的令牌与会话对象(位于服务器上)中的令牌进行比较。如果它们不匹配,则可能发生了 CSRF。
还有一个 Catalyst 插件:Catalyst::Controller::RequestToken
这些模块使用属性处理程序,因此您现有的应用程序几乎不需要修改。
于 2009-12-01T22:58:49.300 回答
0
为了防止来自服务器端的“跨站请求伪造”,最好:
- 使用 HTML 转义。如果您使用模板工具包之类的模板系统,您应该使用它的转义功能。如果你使用 CGI.pm,它有 "escapeHTML" sub 来做这件事。
- 将会话 cookie 的生命周期限制为相对较短的时间。对于 CGI::Session 可以使用 $session->expire($time) 来完成。
- 输出易受攻击的页面时检查referer。
- 不要使用/接受 GET 请求来修改数据。
这样做是特定于框架的,但很简单。
于 2009-05-08T23:14:28.057 回答