Ana*_*eek 9 security forms-authentication asp.net-mvc-4
我们有一个面向外部的应用程序,由外部安全公司进行渗透测试.应用程序已在ASP.NET MVC4上开发并在IIS8/Windows 2012 Server上运行.
报告的漏洞之一是ASPXAUTH不安全.当我检查cookie检查器时,有一些带有安全标志的cookie.但ASPXAUTH不是其中之一.
我做了一些研究,并在web.config上设置了下面这些标志
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="" name="AppName" />
Run Code Online (Sandbox Code Playgroud)
和
<httpCookies httpOnlyCookies="true" requireSSL="true" />
Run Code Online (Sandbox Code Playgroud)
尽管有这些设置,但身份验证cookie未标记为安全.我认为这些标志应该足以将应用程序cookie标记为安全,但是还有一些其他cookie也没有标记为安全.我不太关心它们,因为它们不包含任何敏感信息.但我想将ASPXAUTH标记为安全.
我的问题是,
谢谢.
我发现这段代码使我的身份验证cookie安全.我不记得这个的来源,但如果你把它添加到你的global.asax,它就会对问题进行排序.我不知道为什么但是你的标签中的requireSSL = true不足以使其安全.
protected void Application_EndRequest(Object sender, EventArgs e)
{
string authCookie = FormsAuthentication.FormsCookieName;
foreach (string sCookie in Request.Cookies)
{
if (sCookie.Equals(authCookie))
{
// Set the cookie to be secure. Browsers will send the cookie
// only to pages requested with https
var httpCookie = Response.Cookies[sCookie];
if (httpCookie != null) httpCookie.Secure = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的问题看起来是因为您的表单配置不正确.你有:
<forms ... requireSSL="" ... />
Run Code Online (Sandbox Code Playgroud)
你应该有
<forms ... requireSSL="true" ... />
Run Code Online (Sandbox Code Playgroud)
根据微软的requireSSL在属性httpCookies标签被覆盖requireSSL的属性forms标签.您没有设置该值,但您指定它可能导致IIS使用默认值false.你应该把它设置为true.