我在ASP.Net MVC网站上有一个相当有趣的黑客入侵案例。对于这个网站,我为我的管理区域实现了一个相当简单的身份验证系统 - 一个加密的cookie,它具有该成员的识别签名。每当管理员访问网站时,cookie都将被解密并进行签名验证。如果匹配,他就不必登录。
几天前,我网站上的一位访问者告诉我,只需点击他的Statcounter控制台上没有指向我的管理区域的推荐链接就可以登录我的网站(我从里面的链接访问了他的网站)我的管理员视图)。
他只是点击了statcounter中的一个链接,他以管理员身份登录!
这可能发生的唯一方法是,如果statcounter以某种方式记录我的cookie并在点击指向我的管理员的链接时使用它们!
这是合乎逻辑的还是可以理解的?
我不明白发生了什么。您对我如何保护自己的网站免受此类攻击有什么建议吗?
更新:我创建了一个IP地址白名单系统,以保护我的管理员免受未经授权的访问。基本上,服务器现在将访问者的IP地址与白名单进行比较,并且只有在该IP地址位于该列表中时才允许访问。它还支持通配符,因此即使对于动态IP地址也可以。
虽然它不是万无一失的,但它会占用安全性很多。
答案 0 :(得分:3)
我不知道你是如何在你的网站上进行身份验证的,但我就是这样做的,而且我不认为任何人都可以打破这个:
var authTicket = new FormsAuthenticationTicket(
1,
userName, //user id
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
createPersistentCookie,
null,
"/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
HttpContext.Current.Response.Cookies.Add(cookie);
这使用FormsAuthentication,它使用machine.config
中的密钥加密cookie答案 1 :(得分:2)
我不知道如何通过StatCounter发生这种情况 - 即使它如上所述暴露了您管理区域的链接,他的本地计算机也没有身份验证cookie。请他发送他所关注的链接,并在您通常不使用的浏览器或其他PC上自行尝试。 我的猜测是你的身份验证系统存在一些缺陷,这意味着如果某人(即你)已经在其他地方登录,那么指向管理区域的链接会自动生效。或者,链接包括您的完整凭证,而不是StatCounter的错误。
答案 2 :(得分:0)
该网站可能容易受到被动XSS的攻击。我可以帮忙,但你需要张贴网站地址。
将来,如果您想保护您的(或用户)cookie,请将其设置如下:
$cookie = encoded($user-ip-address);
接下来,验证签名:
if ( decoded($cookie) == $user-ip-address ){
//succesefull login
}
答案 3 :(得分:0)
答案 4 :(得分:0)
不,StatCounter没有记录cookie!
Cookie只能发送到原始域名/从原始域名发送,因此您网站的Cookie绝不会发送到StatCounter。
我的猜测是访问您管理网站的原始会员没有启用Cookie,而您的.net网站又回到了编码会话ID的网址。
这个会话编码的网址由StatCounter记录为推荐链接,泄露了身份验证。