我正在测试一个远程消息服务,我“相信”我需要在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发错了?或两者兼而有之?
提前感谢您的帮助。
答案 0 :(得分:0)
你的POST错了。正确的语法是:
curl -X POST -d 'message[content]=lololol&commit=Send' http://localhost:3000/messages
CSRF保护不会改变参数。默认情况下,当CSRF验证失败时,Rails仅重置会话(请参阅handle_unverified_request的来源)。