将Request.ApplicationPath用于cookie路径是否安全

时间:2010-03-25 11:16:31

标签: asp.net html cookies httpcookie

使用此类代码是否安全?

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

我想了解所有角落案件,请...

3 个答案:

答案 0 :(得分:5)

简而言之,不,这不安全。使用cookie路径充满了问题,因为它们在IE和Chrome中是区分大小写的,但不是FF。这意味着路径案例中的任何不匹配都会填补空缺。

  1. 生成Cookie时,如果您设置的路径与用户输入的内容不同,则浏览器不会将其存储。

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

  3. 你想解决什么问题?

答案 1 :(得分:2)

如果您的应用程序在域的根目录中运行Request.ApplicationPath == "/"。因此,使用您的代码,Cookie的路径将为//。你可以通过这样做来避免这个问题:

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

作为Will correctly points out,您需要确保您的应用程序强制执行一致的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;
    }
}

答案 2 :(得分:1)

不,由于Will指定的原因,它不安全。

但是......您可能希望使用this technique来实现您的意图。