使用此类代码安全吗?将Request.ApplicationPath用于cookie路径安全吗
Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";
我想知道所有角落的情况下,请...
使用此类代码安全吗?将Request.ApplicationPath用于cookie路径安全吗
Response.Cookies[cookieName].Path = Request.ApplicationPath + "/";
我想知道所有角落的情况下,请...
总之,不,这不是安全的。使用Cookie路径充满了问题,因为它们在IE和Chrome中区分大小写,但不是FF。这意味着在路径情况下任何不匹配都会造成困难。
生成cookie时,如果设置的路径与用户输入的内容不同,浏览器将不会存储它。
当用户返回时,如果他们输入的路径与第一次旅程不同,浏览器将不会向该cookie提供请求。
你想解决什么问题?
如果您的应用程序域中,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;
}
}
重定向只有在没有POST的情况下才有可能,因此开发人员必须非常小心小写*所有* url,并且IIS中的虚拟文件夹 - ApplicationPath由它们组成。但正如你所说,大多数问题可以通过将混合病例网址重定向到小写字母来缓解,并使用HttpModule来做到最好。我甚至会失败,因为它会丢失任何想要读取或设置混合大小写的cookie的混合大小写URL。 – Will 2010-03-25 12:04:28
不,这是不安全的,因为将指定的原因。
但是...您可能想要聘请this technique来实现您的意图。
我不确定为什么现在需要它。是不是像Jorn解释的那样,使用cookie路径和asp.net模块(或者在asp.net世界之外的替代方案),你可以允许同一个web应用的多个实例在同一个域上运行? – 2010-03-25 11:36:27
如果您的应用程序需要存储状态,并通过ID唯一标识用户会话,则您的应用程序可以共享无路径的单个Cookie。该id用于查找内存或数据库中的值,如果缺少cookie,则发出一个值,或者如果应用程序无法识别该ID,则会分配新条目。此方法工作得很好,但会消耗内存或带有旧值的数据库空间,因此您需要考虑定期清理它们。 – Will 2010-03-25 12:01:24