如何使用內置Express中間件實現HTTP GET請求來實現CSRF保護?如何在Express中實現GET請求的CSRF保護?
例如,用戶註銷通常通過GET請求進行,實際上改變了Web應用程序的狀態,因此應該對CSRF進行保護。
不幸的是,CSRF中間件忽略了HTTP GET,並且不會導出助手來手動檢查令牌。
如何使用內置Express中間件實現HTTP GET請求來實現CSRF保護?如何在Express中實現GET請求的CSRF保護?
例如,用戶註銷通常通過GET請求進行,實際上改變了Web應用程序的狀態,因此應該對CSRF進行保護。
不幸的是,CSRF中間件忽略了HTTP GET,並且不會導出助手來手動檢查令牌。
您可以創建不會忽略GET請求的Connect CSRF中間件的自定義分支。這樣做的行是這裏:https://github.com/senchalabs/connect/blob/master/lib/middleware/csrf.js#L76
但是,不要這樣做。 GET請求是安全和冪等的:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
換句話說,沒有人擔心惡意網站腳本可能會從網站註銷它們。擔心的是,它可能會以您的名義發佈垃圾郵件或從您的銀行賬戶轉賬。這就是您需要CSRF防範的原因。其它更多的信息在這裏:http://en.wikipedia.org/wiki/Csrf
順便說一句,他們現在暴露的明確設置忽略
app.use(csurf({ignoreMethods: ['HEAD', 'OPTIONS']}))
處理每一個GET請求,絕對是一個壞主意,原因大多不改變狀態(這方法的方式或冪等的,無論如何)。我想知道我是否可以在一個特定的情況下做到這一點。 – toogle
如果您擔心惡意註銷(我認爲這不是一個現實的問題),那麼您最好將其改爲需要POST。 – dankohn