使用非ASCII的Cookie导致所有端点都提供状态代码400

时间:2018-05-24 05:37:03

标签: cookies asp.net-core kestrel-http-server

我有一个网站使用aspnetcore 2.1和Kestrel(IIS作为代理),而我们域上的别人设置了一个包含非ASCII字符的cookie。 I know this is wrong,但我无法确保他们不会和我仍然需要Cookie (否则只需在我的web.config中删除它就很容易)。

结果是:Cookie在一个网站上设置不正确,并且用户在不知情的情况下"访问我们的网站,我们的网站在所有请求上给出了错误400。

有没有办法在它击中Kestrel之前删除cookie标题中的错误字符?我以为我可以使用HttpModule / Middleware / etc来删除它,但看起来Kestrel是第一个获得HttpContext的人。

1 个答案:

答案 0 :(得分:0)

dotnetcore一侧没有解决方法。如果您在dotnetcore应用程序后面使用nginx,则可以删除所有非ascii字符,如下所示:

    set_by_lua_block $cookie_ascii {
        local cookie = ngx.var.http_cookie
        if cookie == nil or cookie == '' then return cookie end
        local cookie_ascii, n, err = ngx.re.gsub(cookie, "[^\\x00-\\x7F]", "")
        return cookie_ascii
    }

    listen 80;
    server_name example.com;

    location / {
        proxy_pass          http://localhost:5000;
        ...
        proxy_set_header    Cookie $cookie_ascii;
        ...
    }    
}