我在ASP.Net MVC网站上有一个非常有趣的黑客案例。对于这个网站,我为我的管理区域实现了一个相当简单的身份验证系统-一个加密的cookie,该cookie具有成员的标识签名。每当管理员访问该网站时,该cookie都会被解密并验证签名。如果匹配,则无需登录。
几天前,我网站上的访问者告诉我,他只需在Statcounter控制台上单击指向我的管理区域的引用链接即可登录我的网站(我已经通过管理视图内的链接访问了他的网站)。
他只是单击statcounter中的链接,然后以管理员身份登录!
发生这种情况的唯一方法是,如果statcounter以某种方式记录了我的Cookie并在他单击指向我的管理员的链接时使用了它们!
这是合乎逻辑的还是可以理解的?
我不明白发生了什么。您对我如何保护我的网站免受此类攻击有任何建议?
更新:我创建了一个IP地址白名单系统,以保护管理员免受未经授权的访问。基本上,服务器现在会将访问者的IP地址与白名单进行比较,并且仅当该IP地址在该列表中时才允许访问。它还支持通配符,因此即使是动态IP地址也可以。
尽管它不是万无一失的,但是它占用了许多安全漏洞。
最佳答案
我不知道您是如何在您的网站上进行身份验证的,但这就是我的身份,并且我认为任何人都不能破坏该身份验证:
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进行加密