ASP会话的安全性后果

时间:2014-12-21 04:34:18

标签: asp.net session

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

我知道会话存储在服务器端,在正常情况下客户端无法直接访问。 ASP.net的其他持久性机制在理论上可能会失败,by modifying viewstate or cookie values客户端,但这些加密实现缺陷不应暴露会话状态。

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

例如:

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

  • 攻击者能否以编程方式访问IIS(WMI mabey?) 能够在相同或另一个应用程序池的内存中访问和更改会话状态吗?

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

我知道这些问题通常依赖于我的代码中的错误,所以无论如何都假设我编写了最糟糕,最不安全的代码(我没有,但是......)并且做了像更改会话这样的事情在构造函数或生命周期事件中。

2 个答案:

答案 0 :(得分:2)

由于我们并不确切知道您的代码是如何实现的,因此我们所能做的只是猜测。

首先,Session永远不应该用于安全敏感的事情。是的,客户无法直接阅读会话,还有其他因素需要考虑。

  1. 默认情况下,会话cookie不会加密并以纯文本形式传递。
  2. 会话修复攻击很容易实现
  3. 如果会话cookie被劫持,甚至被猜到,那么用户帐户是什么并不重要,他们将获得您通过该cookie分配的任何安全权限。
  4. 会话不稳定,IIS可以在任何时候终止会话,因此您最终会遇到用户仍然登录的情况,但由于许多可能的原因会导致会话丢失。所以现在他们的安全也不稳定。
  5. 还有许多其他更合适的方法可以做你想要的,Session是 NEVER 一个合适的方法。

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

    • 使用FormsAuthentication票证的用户数据字段存储信息
    • 将自定义声明与基于声明的身份验证配合使用,如ASP.NET Identity,WIF或IdentityServer。
    • 使用asp.net缓存来保存临时信息,基于身份(而非会话)并添加缓存逐出超时。
    • 以及更多...

答案 1 :(得分:1)