You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache仅记录.MyAuth Cookie值或拦截含无效分隔符的Cookie请求

解决方案一:让Apache只记录.MyAuth的Cookie值

Apache默认只认分号作为Cookie的分隔符,遇到逗号时,{.MyAuth}C会直接把从.MyAuth=开始到请求头末尾的内容全捞出来。要精准提取值,得先通过mod_rewrite把目标值存到环境变量,再记录这个变量:

  1. 先启用mod_rewrite(没开的话执行命令):
a2enmod rewrite
systemctl restart apache2
  1. 在你的VirtualHost配置里加规则提取.MyAuth的值:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} ^.*\.MyAuth=([^,;]+).*$
RewriteRule ^ - [E=MY_AUTH:%1]

正则会匹配.MyAuth=后面到逗号或分号之前的内容,存到环境变量MY_AUTH里。

  1. 修改日志格式,记录这个环境变量:
LogFormat "%{MY_AUTH}e" minulogi
CustomLog ${APACHE_LOG_DIR}/access.log minulogi

这样日志里就只会输出.MyAuth的纯值,不会带上后面的Company=165。

解决方案二:拦截用无效分隔符的请求

可以选Apache或ASP.NET MVC两种方式拦截:

用Apache拦截

通过mod_rewrite检查Cookie头里的逗号(标准分隔符是分号),直接返回400错误:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} ,
RewriteRule ^ - [R=400,L]

只要Cookie头带逗号,就返回400 Bad Request。

用ASP.NET 9 MVC拦截

加个全局过滤器,检查Cookie头格式:

public class InvalidCookieFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        var cookieHeader = context.HttpContext.Request.Headers["Cookie"].ToString();
        // 排除Cookie值本身带引号包含逗号的合法情况,只拦截用逗号分隔Cookie的情况
        if (cookieHeader.Contains(",") && !cookieHeader.Contains("=\"") && !cookieHeader.EndsWith("\""))
        {
            context.Result = new BadRequestObjectResult("Cookie分隔符错误:请用分号替代逗号");
        }
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // 无需处理后续逻辑
    }
}

然后在Program.cs里注册这个过滤器:

builder.Services.AddControllersWithViews(options =>
{
    options.Filters.Add<InvalidCookieFilter>();
});

这样不符合标准格式的请求会直接被打回400。

内容的提问来源于stack exchange,提问作者Andrus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:50:06