我正在运行一个 NodeJS 应用程序,托管在 Linux Azure Web 应用程序中。 我已经为要转发到 Log Analytics 工作区的 HTTP 日志设置了诊断日志,并查看了日志,我可以看到默认情况下包含 cookie。
我理想地希望控制哪些 cookie 包含在 HTTP 日志中或完全阻止 cookie 被记录。 我没有找到任何有关配置 HTTP 日志的文档,并且该日志类别的诊断设置只是打开或关闭。
我可以做些什么来控制 HTTP 日志内容吗? 谢谢
我理想地希望控制哪些 cookie 包含在 HTTP 日志中或完全阻止 cookie 被记录。
Azure 应用服务诊断日志记录当前不允许直接控制 HTTP 日志中显示的标头或 Cookie。
在应用程序级别,我们可以在 Node.js 应用程序中添加中间件,以在敏感 cookie 被记录之前拦截和屏蔽它们。
我在代码中添加了中间件,用于检查请求中的每个 cookie 并用
[FILTERED]
替换敏感的 cookie 值。
app.use((req, res, next) => {
console.log("Middleware is running");
if (req.headers.cookie) {
const maskedCookies = req.headers.cookie.split(';').map(cookie => {
const [name, value] = cookie.split('=');
if (sensitiveCookies.includes(name.trim())) {
return `${name}=[FILTERED]`;
}
return cookie;
});
req.headers.cookie = maskedCookies.join('; ');
console.log("Masked Cookies:", req.headers.cookie);
完整app.js代码:
const express = require('express');
const app = express();
const sensitiveCookies = ["SensitiveCookie", "AnotherCookie"];
app.use((req, res, next) => {
console.log("Middleware is running");
if (req.headers.cookie) {
const maskedCookies = req.headers.cookie.split(';').map(cookie => {
const [name, value] = cookie.split('=');
if (sensitiveCookies.includes(name.trim())) {
return `${name}=[FILTERED]`;
}
return cookie;
});
req.headers.cookie = maskedCookies.join('; ');
console.log("Masked Cookies:", req.headers.cookie);
} else {
console.log("No cookies in request");
}
next();
});
app.get('/', (req, res) => {
res.send("Hello, your app is running!");
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
此方法可确保敏感的 cookie 值不会暴露。
本地输出:
部署后输出:
屏蔽敏感数据的其他替代方法: