オフィス狛 技術部のJoeです。
担当しているプロジェクトで、Node.js と Express でAPIを作成して、
リクエストのログを出力しているのですが、
セキュリティの観点から、一部リクエストの値をマスクする必要がありました。
express-requests-loggerで、マスクする方法をまとめました。
【バージョン情報】
・node:v12.14.0
・express-requests-logger:v3.0.3
■express-requests-logger のインストール
express-requests-loggerをインストールします。npm install express-requests-logger
■ログ出力設定
app.jsにexpress-requests-loggerの設定を追加します。※loggerで指定している「httpLogger」ついては、こちらの記事を参考に設定いただければと思います
Node.js + Express + log4jsで、アクセスログとリクエストログを取る。
const audit = require('express-requests-logger');
// ログ設定
app.use(audit({
logger: httpLogger,
request: {
maskBody: ['password'],
},
response: {
maskBody: ['token'],
},
}));
上記のように設定しますと、リクエストとレスポンスの内容がログに出力されますが、
リクエストBodyの「password」と、レスポンスBodyの「token」の値が「XXXXX」にマスクされます。
【ログ出力結果】
[2021-04-16T11:04:56.407] [INFO] http - {
response: {
status_code: 200,
(中略)
body: '{"token":"XXXXX"}'
},
request: {
method: 'POST',
(中略)
body: '{"loginId":"test","password":"XXXXX"}'
},
'millis-timestamp': 1618538696407,
'utc-timestamp': '2021-04-16T02:04:56.407Z',
stage: 'end'
} Inbound Transaction
他にも、項目自体を除外するオプションなどもありますので、一部ご紹介します。
詳細は「express-requests-logger」のホームページをご覧ください。
express-request-logger
【オプション】
■doubleAudit
・true:リクエストを受けたタイミングで出力(リクエスト)、
レスポンスを送信したタイミングで出力(リクエストとレスポンス)します。
・false:レスポンスを送信したタイミングで出力(リクエストとレスポンス)します。
■excludeURLs
配列で指定した文字列が、リクエストURLの一部と一致する場合は、リクエストもレスポンスも出力しません。
【オプション(リクエスト)】
■audit
・true:リクエストを出力します。
・false:リクエストは出力しません。
■excludeBody
配列で指定した文字列と一致する項目は、bodyに出力しません。
※「*」を指定すると、bodyの全ての項目を出力しません。
■maskQuery
配列で指定した文字列と一致する項目は、queryにマスクして出力します。
■excludeHeaders
配列で指定した文字列と一致する項目は、headersに出力しません。
※「*」を指定すると、headersの全ての項目を出力しません。
■maskHeaders
配列で指定した文字列と一致する項目は、headersにマスクして出力します。
■maxBodyLength
bodyに出力される最大文字数を指定できます。
【オプション(レスポンス)】
レスポンスもリクエストと同様のオプションで、
Body、Headersの項目について、マスクや除外することができます。
少ない設定でマスクすることができますので、機会があればお試しください。
Express , Node.js

0 件のコメント:
コメントを投稿