ASP 会话的 Seurity 后果



我正在考虑将一些安全敏感信息(我们的 Web 应用程序的用户有效权限(存储在会话驻留对象中,以减少数据库查询,同时在整个应用程序中执行权限检查。

我知道会话存储在服务器端,在正常情况下客户端无法直接访问。ASP.net 的其他持久性机制理论上可以通过在客户端修改视图状态或 cookie 值来击败,但这些类型的加密实现缺陷不应暴露会话状态。

攻击者需要对服务器进行多大程度的控制才能修改客户端会话状态中的数据?假设他们有一个会话 ID 和一个 ASPAUTH cookie。

例如:

  • 远程攻击,例如修改后的 POST 或其他处理程序对页?

  • 具有对 IIS (WMI mabey( 的编程访问权限的攻击者会不会?是否能够访问和更改同一或其他应用池内存中的会话状态?

  • 攻击者是否需要能够将代码发布到我的应用,以便操纵会话内存?

我知道这类问题通常依赖于我的代码中的错误,所以一定要假设我写了有史以来最糟糕、最不安全的代码(我没有,但是......(,并做一些事情,比如在构造函数或生命周期事件中更改会话。

由于我们不知道您的代码是如何实现的,我们所能做的就是猜测。

首先,会话绝不应用于安全敏感的事情。 是的,客户端确实无法直接读取会话,还有其他因素需要考虑。

  1. 默认情况下,会话 Cookie 不加密,而是以纯文本形式传递。
  2. 会话固定攻击很容易完成
  3. 如果会话 cookie 被劫持,甚至被猜到,那么用户帐户是什么并不重要,他们将获得您通过该 cookie 分配的任何安全权限。
  4. 会话不稳定,IIS 可以随时终止会话,因此您最终会遇到用户仍处于登录状态的情况,但由于许多可能的原因,他们的会话丢失。 所以现在他们的安全也不稳定。

还有许多其他更合适的方法来做你想做的事情,会话从来都不是一个合适的方法。

其他合适的方法包括...

  • 使用 FormsAuthentication 票证的用户数据字段存储信息
  • 将自定义声明与基于声明的身份验证(如 ASP.NET 标识、WIF 或标识服务器(结合使用。
  • 使用 asp.net 缓存根据标识(而不是会话(保存临时信息,并添加缓存逐出超时。
  • 还有更多...

会话变量可能存在安全风险。保护会话变量总是更好。

您应该考虑的几个链接...

保护会话状态http://msdn.microsoft.com/en-us/library/ms178201%28v=vs.140%29.aspx

http://www.dotnetnoob.com/2013/07/ramping-up-aspnet-session-security.html

http://www.codeproject.com/Articles/210993/Session-Fixation-vulnerability-in-ASP-NET

http://www.dotnetfunda.com/articles/show/730/session-security-in-aspnet

我同意埃里克的观点。

问候

最新更新