Файлы cookie, не поддерживающие ASCII, заставляют все конечные точки давать код состояния 400 - PullRequest
0 голосов
/ 24 мая 2018

У меня есть веб-сайт, использующий aspnetcore 2.1 и Kestrel (IIS в качестве прокси-сервера), и кто-то еще на нашем домене устанавливает cookie, который содержит символы не ASCII. Я знаю, что это неправильно , но я не могу убедиться, что они этого не делают, и Я все еще хочу печенье (в противном случае просто удалить его в моем файле web.config).

Результат: неправильно установлен cookie на одном сайте, и когда пользователь «по незнанию» заходит на наш сайт, наш сайт выдает ошибку 400 при всех запросах .

Есть ли способ удалить плохие символы в заголовке cookie, прежде чем он попадет в Kestrel?Я думал, что смогу использовать HttpModule / Middleware / etc для его удаления, но похоже, что Kestrel первым получил HttpContext.

1 Ответ

0 голосов
/ 23 ноября 2018

Нет обходного пути на стороне dotnetcore.Если вы используете nginx позади своего приложения dotnetcore, вы можете удалить все символы, не относящиеся к 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;
        ...
    }    
}
...