オフィス狛 技術部の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 件のコメント:
コメントを投稿