防止 cookie 被记录到 azure web 应用程序 Linux HTTP 日志中

问题描述 投票:0回答:1

我正在运行一个 NodeJS 应用程序,托管在 Linux Azure Web 应用程序中。 我已经为要转发到 Log Analytics 工作区的 HTTP 日志设置了诊断日志,并查看了日志,我可以看到默认情况下包含 cookie。

我理想地希望控制哪些 cookie 包含在 HTTP 日志中或完全阻止 cookie 被记录。 我没有找到任何有关配置 HTTP 日志的文档,并且该日志类别的诊断设置只是打开或关闭。

我可以做些什么来控制 HTTP 日志内容吗? 谢谢

azure azure-web-app-service azure-webapps azure-diagnostics azure-linux
1个回答
0
投票

我理想地希望控制哪些 cookie 包含在 HTTP 日志中或完全阻止 cookie 被记录。

Azure 应用服务诊断日志记录当前不允许直接控制 HTTP 日志中显示的标头或 Cookie。

  • Azure 的 HTTP 日志会自动记录所有传入标头,包括 Cookie,而没有任何方法来屏蔽或排除特定值,这可能会导致敏感的 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 值不会暴露。

本地输出:

enter image description here

enter image description here

部署后输出:

enter image description here

enter image description here

屏蔽敏感数据的其他替代方法:

  • 将日志转发到 Azure 事件中心
    • 您可以配置 Azure 将日志发送到中间服务,例如事件中心或日志分析,其中自定义管道或 Azure 函数可以在最终存储之前屏蔽敏感信息。请参阅此doc1doc2以更好地理解。
  • 使用 Application Insights 遥测处理器
© www.soinside.com 2019 - 2024. All rights reserved.