これは私をナットにしています。私はlusca source codeを読んでみましたが、理解するのは難しいと感じました。luscaのCSRFはhttps:403で禁止されていません。
いくつかの例もチェックされていますが、各設定が異なり、私が持っているデバッグ出力だけが比較する2つの文字列であるため、いくつかの助けをお願いします。
は、ここでは、コード・サーバー側です:
app.use([
cookieParser(process.env.SESSION_SECRET),
session({
resave: false,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({ url: MONGO_URL, autoReconnect: true }),
cookie: {
secure: process.env.NODE_ENV === 'production'
},
}), lusca({
csrf: true,
xframe: 'SAMEORIGIN',
xssProtection: true,
})]);
そしてクライアント側から、私はそれでx-csrf-token:l0gH3xmssge53E/p2NsJ4dGnHaSLdPeZ+bEWs=
ヘッダーとPOST
要求のAjaxを送信:
fetch(url, {
method: 'POST',
credentials: 'include',
headers: {
'x-csrf-token': CSRF_TOKEN
}
});
クレイジーなことは、それがローカルに働いて、ですが、 https
がproduction
に入るとすぐに403 Forbidden
というエラーメッセージが表示されます。ここで
私が使用したバージョンされています
"cookie-parser": "1.4.3",
"express-session": "1.15.3",
"lusca": "1.5.1",
はまた、私はexpress/session docからこれを読んで:
注バージョン1.5.0以来、クッキーパーサーミドルウェアは、もはや使用する必要はありませんこのモジュールが機能するには
しかし、私が懸念している限り、ユーザーの永続的なID(セッションよりも長い)を保存する必要があります。私はそのためにクッキーを使用する必要がありますか?
私は全体のセッション/クッキーのことをよりよく理解したいと思いますが、今まではトピックに関する有用な情報が見つかりませんでした。
ありがとうございます!
私のアプリはdockerでホストされており、nginxはまずルーティングを行います。それはプロキシと呼ばれるべきものですか?とにかく、私は 'trust proxy'を試してみましたが動作しません。 :(助けてくれてありがとう) –
セッションミドルウェアのオプションに 'proxy'の設定を追加する必要があるようです。答えを編集してみることができます – mkhanoyan
まだ運がありません。これは確かではありません:NginxはHTTPプロキシを実行せず、ドッカーはここで問題にならないはずです。私の気持ちは、クッキーが安全で+セッションで使用されていることと関係しています... –