假設有一個名為 的假設電子郵件站點email.com和一個名為 的惡意站點evil.com。email.com使用 POST 請求發送電子郵件。
email.com具有保存在其計算機上的會話 cookie 的用戶訪問evil.com, evil.com并向其發送 httpPOST請求,email.com從而發送詐騙電子郵件。據我了解,服務器會在不進行任何檢查的情況下從用戶帳戶發送電子郵件,因為瀏覽器提供了帶有請求的會話 cookie,并且預檢檢查不適用于POST,即使 CORS 不共享回應from email.comwithevil.com因為它Access-Control-Allow-Origin不包含evil.com它沒關系,因為電子郵件已經發送。
我知道這可以通過使用例如 CSRF 令牌來防止,但是為什么不也只為POST請求實施預檢檢查呢?
uj5u.com熱心網友回復:
你聲稱
飛行前檢查不適用于
POST
但這是不正確的:碰巧使用該方法的所謂簡單請求POST不會被預檢,但非簡單 POST請求會被預檢。
例如,以下腳本在任何 Web 源的背景關系中運行,而不是https://google.com觸發 CORS 預檢,因為根據Fetch 標準(包含事實上的 CORS 規范),X-Foo它不是CORS 安全串列中的請求標頭:
let opts = {
method: "POST",
headers: {
"X-Foo": "foo"
}
};
fetch("https://google.com", opts);
或者,查看Jake Archibald的CORS 游樂場的這個特定實體。
此外,CORS 預檢從未打算作為針對 CSRF 的防御機制;這種信念是一種常見的誤解。相反,preflight 的目的是保護在瀏覽器支持跨域請求出現之前的服務器。有關CORS 預檢背后原理的更多詳細資訊,請參閱這個更完整的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483785.html
