【问题标题】:How to disable CSRF for jQuery?如何禁用 jQuery 的 CSRF?
【发布时间】:2011-08-20 19:00:53
【问题描述】:

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

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

如果我通过应用程序本身发送 POST,则消息传递有效,并且我在我的 rails 服务器日志中得到以下输出:

在 2011-05-07 10:49:29 -0400 开始为 127.0.0.1 发布“/messages”
MessagesController#create as JS 处理
参数:{"utf8"=>"✓", "authenticity_token"=>"xxx", "message"=>{"content"=>"damn"}, "commit"=>"Send"}
SQL (0.1ms) 选择名称
来自 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) 在 133 毫秒内完成 200 次 OK(查看次数:17.0 毫秒 | ActiveRecord:0.6 毫秒)

如果我通过 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 发布“/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)
在 309 毫秒内完成 200 次 OK(查看次数:28.1 毫秒 | ActiveRecord:0.3 毫秒)

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

可以安全地假设这是由于 jQuery 中的 CSRF 不允许内容发布吗?如果是这样,我该如何禁用它?还是用 cURL 发布错误?还是两者兼而有之?

提前感谢您的帮助。

【问题讨论】:

    标签: jquery ruby-on-rails curl csrf


    【解决方案1】:

    您的 POST 错误。正确的语法是:

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

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

    【讨论】:

    • ël。谢谢楼主,就是这样。
    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2017-12-03
    相关资源
    最近更新 更多