代码之家  ›  专栏  ›  技术社区  ›  Sergej Andrejev

使用Request.ApplicationPath作为cookie路径安全吗

  •  2
  • Sergej Andrejev  · 技术社区  · 14 年前

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

    我想知道所有角落的案子,请。。。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Will    14 年前

    总之,不,不安全。使用cookie路径充满了问题,因为它们在IE和Chrome中区分大小写,但在FF中不区分大小写。这意味着任何路径不匹配的情况下都会塞满东西。

    1. 生成cookie时,如果设置的路径与用户键入的路径不同,浏览器将不会存储它。

    2. 当用户返回时,如果他们输入的路径与第一次不同,浏览器将不会向cookie提供请求。

    你想解决什么问题?

        2
  •  3
  •   Community CDub    7 年前

    如果应用程序在域的根目录下运行, Request.ApplicationPath == "/" . 因此,使用您的代码,cookie的路径将是 //

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

    作为 Will correctly points out ,您将需要确保应用程序强制执行一致的URL大小写(即,将包含大写字母的URL的所有请求重定向为其小写等效项)。

    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;
        }
    }
    
        3
  •  1
  •   Community CDub    7 年前

    不,这是不安全的,因为会详细说明原因。

    但是。。。你可能想雇用 this technique 实现你的意图。