簡體   English   中英

從瀏覽器外部到 Rails 服務器的請求的 CSRF 令牌問題

[英]CSRF token problem on requests from outside the browser to a Rails server

我需要從瀏覽器外部發出 HTTP POST請求,但 Rails 后端不接受身份驗證(錯誤 401)。 我知道在這種情況下我需要傳遞一個 CSRF 令牌,但它不起作用。

當我通過瀏覽器上的表單發出請求時,它按預期工作,但是當我嘗試從瀏覽器外部(例如使用 curl)模擬相同的請求(在標頭和 cookie 方面)時,身份驗證不會不工作。

兩個小改動讓我在沒有瀏覽器的情況下成功:(1)關閉驗證 CSRF 的protect_from_forgery或(2)使用GET而不是POST請求。 在這兩種情況下,傳遞 cookie 就足夠了。 這意味着問題肯定與 CSRF 相關。

所以,我的問題是:如何在不使用瀏覽器的情況下將受 CSRF 保護的 HTTP POST到 Rails 服務器?

為了澄清,該過程分為三個步驟:

  1. 登錄:返回一個cookie來識別session;

  2. :一個GET請求,返回 CSRF 令牌以供以后使用(使用 cookie);

  3. 創建:提交我要創建的信息的POST請求(使用 session cookie 和 CSRF 令牌)。

唯一失敗的是第三步。

假設您的 CSRF 令牌是基於 cookie 的,那么您用來發出請求的程序需要跟蹤 cookies。 查看 curl 中的--cookie-jar選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM