【发布时间】:2012-03-28 00:11:38
【问题描述】:
我有一个托管许多 asp.net 应用程序的网站。有些是用 MVC2 编写的,有些是用 MVC3 编写的,有些不是内部编写的,而是二进制部署的(尽管我们可以找到源代码),还有更多是用 ASP.Net 2.0 网络表单编写的。在所有这些站点中,我们使用来自登录应用程序的单个登录页面。我们可以这样做,因为所有应用程序共享:
- 同一个应用程序池
- 相同的机器密钥
- 相同的登录cookie名称
我的问题是他们也共享安全问题,没有 cookie 欺骗保护。 我的计划是向登录 cookie(可能在 useradata 字段中)添加一些额外信息(ip 的前 2 个字节,用户代理),然后在接受 cookie 之前在每个请求上验证这一点。
我的问题是 asp.net 在哪里检查表单身份验证票并加载用户,我可以覆盖它以在使用登录之前检查一些额外的东西。
如果我不必将此代码添加到每个 global.cs 并且可以将其放入某个 dll 并在配置文件中引用该 dll,那将是一个加分项。
【问题讨论】:
-
在子注释中,我添加了一个自定义 SessionIDManager 以查看是否有帮助,但这只有助于我的 sessionID 而不是我的登录 cookie。
-
能否使用 Global.asax 中的 Application_AuthenticateRequest 事件 - 一些相关的 cmets 可能在这里:stackoverflow.com/questions/875472/authenticaterequest-event
-
asp.net 不对 cookie 进行 IP 检查的原因是因为这是一个非常愚蠢的想法。用户 IP 地址更改的情况太多了,例如使用移动设备时(这可能会随时更改)或用户动态 IP 更改时,或者存在共享代理池。另外,这不会阻止某人将 cookie 从防火墙后面的一台机器复制到同一防火墙后面的另一台机器上。您试图通过破坏用户使用该网站的能力来修复一个不太可能的漏洞,但它甚至无法正常工作!。
-
更好的方法是简单地使用 SSL 进行 cookie 传输,然后保护传输中的 cookie。它不会阻止对机器具有物理或远程访问权限的人访问 cookie,但这是一般 cookie 中固有的问题。将 cookie 锁定到 IP 只是一种糟糕的做法。
-
我同意@MystereMan,遗憾的是我们的 CMS 与 SSL 不兼容。可悲的是,我看到我的几个用户突然变成了黑客的中国 IP 地址,这不太可能。 SSL 对此没有帮助,因为我很确定我的用户感染了病毒和间谍软件,直接从他们的浏览器复制了 cookie。
标签: asp.net security authentication forms-authentication