InvalidAuthenticityToken 问题

在提交表格到数据库的时候,出现 ActionController::InvalidAuthenticityToken 错误

 

原因分析:

 

Turn on request forgery protection. Bear in mind that only non-GET, HTML/JavaScript requests are checked

 

ActionController::InvalidAuthenticityToken 异常一般出现出现在手写的html form 标签和Ajax请求中,为什么会出现这个异常呢,这是从rails 2.0 开始包含的一个新功能,目的在于防止CSRF(Cross-Site Request Forgery)攻击.

 

rails 为了保证当前的请求是来自自己的请求,而不是通过其他网站伪造的请求,都会在生成的form 里加入一个隐藏的值

Html代码
 
解决方案:

 

1.  uses the cookie session store (then you don't need a separate :secret)
protect_from_forgery :except => :index  #除了index外,其他Action都需要验证

protect_from_forgery :only => :inde  #只有index需要验证


2.uses one of the other session stores that uses a session_id value.
protect_from_forgery :secret => 'my-little-pony', :except => :index


3.you can disable csrf protection on controller-by-controller basis:
skip_before_filter :verify_authenticity_token #跳过验证

Ok,问题解决了

 

CSRF(Cross-Site Request Forgery)攻击是什么?

CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站 脚本 (XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。


你可能感兴趣的:(Invalid)