今日讨论 Rails 安全性的话题 越来越热,因此 Rails 将 CsrfKiller 插件 加入了 核心部分
Csrf Killer? 插件为所有的非GET1请求 中的form 添加了一个独特的session token 一栏。这一栏内容确保了接收到的请求必须是来自于 授权用户的 session2
现在轮到 默认功能 了。如果您只想应用默认的行为则不必设置任何东西。然而您仍然可以通过以下示例针对自己的设定来进行调整:
class PostsController < ApplicationController protect_from_forgery :secret => '2kdjnaLI8', :only => [:update, :delete, :create] ... end
如果您已经使用 edge Rails 的默认 cookie 的 session存贮 ,那么您则不必设置 :secret 密钥。
protect_from_forgery :only => [:update, :delete, :create]
如果您没有使用 cookie 的 session 存贮,则可以改变用来建立独特蜜月的 digest method (默认method是 ‘SHA1’)。
protect_from_forgery :secret => '2kaienna9ea90djnaLI8', :digest => 'MD5'
当系统接收到外部请求的时候,如果请求无法满足当前session的签名保护标签,系统将会输出一个来自 ActionController::InvalidAuthenticityToken 的 exception。也许这段代码在将来会有新的错误输出语法?
注意:鉴别请求的签名保护功能只在一下情况中可以被应用:
skip_before_filter :verify_authenticity_token
如果您想在全网站范围中取消这项功能,只要将下列添加到 application.rb:
self.allow_forgery_protection = false
感谢 Yudi 提供本系列文档
原文作者是 Ryan Daigle, 请访问他的博客