如何为jQuery禁用CSRF?

时间:2011-05-07 15:31:47

标签: jquery ruby-on-rails curl csrf

我正在测试一个远程消息服务,我“相信”我需要在jQuery中禁用CSRF才能使我的初始远程测试成功。

我已经在应用程序控制器中禁用了CSRF。

如果我通过应用程序本身发送POST,则消息传递正常,我在rails服务器日志中获得以下输出:

  

在2011-05-07 10:49:29 -0400开始发布127.0.0.1的POST“/ messages”   由MessagesController处理#创建为JS
    参数:{“utf8”=>“✓”,“authenticity_token”=>“xxx”,“message”=> {“content”=>“该死的”},“提交”=>“发送” }
    SQL(0.1ms)SELECT名称
   来自sqlite_master
   WHERE type ='table'AND NOT name ='sqlite_sequence'

     

AREL(0.5ms)INSERT INTO“messages”(“content”,“created_at”,“updated_at”)VALUES('damn','2011-05-07 14:49:29.887582','2011-05- 07 14:49:29.887582')   渲染消息/ _message.html.erb(3.6ms)   渲染消息/ create.js.erb(8.2ms)   在133ms完成200 OK(浏览次数:17.0ms | ActiveRecord:0.6ms)

如果我通过cURL发送以下POST命令,我会收到此输出:

    curl -X POST -d 'message={"content":"lololol", "commit":"Send"}' http://localhost:3000/messages
  

在2011-05-07 10:54:15 -0400开始发布127.0.0.1的POST“/ messages”     由MessagesController处理#create as
    参数:{“message”=>“{\”content \“:\”lololol \“,\”commit \“:\”发送\“}”}
    AREL(0.3ms)INSERT INTO“messages”(“content”,“created_at”,“updated_at”)VALUES(NULL,'2011-05-07 14:54:15.934156','2011-05-07 14:54: 15.934156' )
  渲染消息/ _message.html.erb(0.5ms)
  渲染消息/ create.js.erb(4.2ms)
  在309ms完成200 OK(浏览次数:28.1ms | ActiveRecord:0.3ms)

我可以在页面上看到一个空白条目,其中包含运行cURL命令的时间戳,并且在数据库中创建的记录除了内容之外的所有内容。

是否可以安全地假设这是因为jQuery中的CSRF不允许内容发布?如果是这样,我该如何禁用它?或者用cURL发错了?或两者兼而有之?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你的POST错了。正确的语法是:

curl -X POST -d 'message[content]=lololol&commit=Send' http://localhost:3000/messages

CSRF保护不会改变参数。默认情况下,当CSRF验证失败时,Rails仅重置会话(请参阅handle_unverified_request的来源)。