使用此类代码是否安全?
Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";
我想了解所有角落案件,请...
答案 0 :(得分:5)
简而言之,不,这不安全。使用cookie路径充满了问题,因为它们在IE和Chrome中是区分大小写的,但不是FF。这意味着路径案例中的任何不匹配都会填补空缺。
生成Cookie时,如果您设置的路径与用户输入的内容不同,则浏览器不会将其存储。
当用户返回时,如果他们输入的路径与第一次旅行的情况不同,浏览器将不会向cookie提供请求。
你想解决什么问题?
答案 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来实现您的意图。