ExpressアプリをNginxで報告するのに苦労csp violationsしましたが、上記の回答から学んだ2つのことは次のとおりです。
POSTメソッドではなくGETメソッドであるべき
req.bodyレポートを含む
しかし、上記は十分ではなく、空になり続け、req.bodyそれを修正する方法を説明する他の投稿が見つかりませんでした. いくつかの調査の後、私はこの投稿に出くわしましdougwilsonたcsp report.
req.bodyが空だった理由はcsp report、次の構成の後にルート ハンドラーを配置したためです。
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
これらの上にルートハンドラーを移動しましたcsp reportが、まだ空になり続けていたので、レポートを取得するためにreq.body上記のルートハンドラーを追加しましたcsp reportreq.body
app.use(bodyParser.json({ type: 'application/csp-report' }));
csp reportリクエスト ハンドラの上に上記の行を追加した後、ExpressContent-type を持つリクエストを として解析する必要があることを理解しましたapplication/csp-report。
おそらくExpressデフォルトでは parse を行わずapplication/csp-report、上記を追加することで問題が解決しました。また、if Expressparsesをデフォルトでグーグル検索したところ、Firefox が送信するのに対して送信することを主張するこの要点application/csp-reportに出くわしました(そして、私は Chrome を使用しています -で問題が発生した場合も含めることができます)。Chromeapplication/csp-reportapplication/jsonapplication/jsonFF
だから、これは私の中でどのように見えるかですapp.js
// without following csp-report don't get parsed.
app.use(bodyParser.json({ type: 'application/csp-report' }));
app.get('/vehicle/cspreport', function(req, res) {
res.status(403);
});
app.post('/vehicle/cspreport', function(req, res) {
console.log('csp report > ' + JSON.stringify(req.body));
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
...
OPによって投稿された受け入れられた回答はからであり、次のバージョンのNode.js、Express、およびNginxで2011この問題をどのように解決したかを示す回答を追加することを考えました2016
Node: v4.2.4
Express: 4.13.1
Nginx: 1.8.1