我有一个网站使用aspnetcore 2.1和Kestrel(IIS作为代理),而我们域上的别人设置了一个包含非ASCII字符的cookie。 I know this is wrong,但我无法确保他们不会和我仍然需要Cookie (否则只需在我的web.config中删除它就很容易)。
结果是:Cookie在一个网站上设置不正确,并且用户在不知情的情况下"访问我们的网站,我们的网站在所有请求上给出了错误400。
有没有办法在它击中Kestrel之前删除cookie标题中的错误字符?我以为我可以使用HttpModule / Middleware / etc来删除它,但看起来Kestrel是第一个获得HttpContext
的人。
答案 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;
...
}
}