Безопасно ли использовать Request.ApplicationPath для пути к файлу cookie

StackOverflow https://stackoverflow.com/questions/2514936

Вопрос

Безопасно ли использовать такой код?

Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";

Я хочу знать обо всех угловых случаях, пожалуйста...

Это было полезно?

Решение

Короче говоря, нет, это небезопасно.Использование путей к файлам cookie сопряжено с проблемами, поскольку они чувствительны к регистру в IE и Chrome, но не в FF.Это означает, что любое несоответствие в path case приведет к усложнению ситуации.

  1. При создании файла cookie, если заданный вами путь отличается по регистру от того, что ввел пользователь, браузеры не будут сохранять его.

  2. Когда пользователь возвращается, если путь, который он вводит, отличается в случае с первой поездкой, браузер не будет предоставлять файл cookie с запросом.

Какую проблему вы пытаетесь решить?

Другие советы

Если ваше приложение выполняется в корневом каталоге домена, Request.ApplicationPath == "/".Следовательно, с вашим кодом путь к вашему файлу cookie будет следующим //.Вы можете обойти эту проблему, сделав это:

cookie.Path = Request.ApplicationPath;
if (cookie.Path.Length > 1) cookie.Path += '/';

Как Уилл правильно указывает, вы захотите убедиться, что ваше приложение применяет согласованный набор URL - адресов (т.е.перенаправлять все запросы с URL-адресами, содержащими прописные буквы, на их эквивалент в нижнем регистре).

В остальном, я считаю, что ты должен быть в порядке, делая это.Если вы хотите, чтобы все ваши файлы cookie были "в области приложения", рассмотрите возможность создания пользовательского IHttpModule с таким кодом, как этот (или расширить global.asax.cs):

private void Application_EndRequest(object sender, EventArgs e)
{
    var app = (HttpApplication)sender;

    var cookiePath = app.Request.ApplicationPath;
    if (cookiePath.Length > 1) cookiePath += '/';

    foreach (string name in app.Response.Cookies.AllKeys)
    {
        var cookie = app.Response.Cookies[name];
        cookie.Path = cookiePath;
    }
}

Нет, это небезопасно по причинам, которые будут указаны.

Но...Возможно, вы захотите нанять эта техника чтобы исполнить ваше намерение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top