我正在研究在会话驻留对象中存储一些安全敏感信息(用户对Web应用程序的有效权限),以便在整个应用程序中执行权限检查时减少数据库查询。
我知道会话存储在服务器端,在正常情况下客户端无法直接访问。 ASP.net的其他持久性机制在理论上可能会失败,by modifying viewstate or cookie values客户端,但这些加密实现缺陷不应暴露会话状态。
攻击者在客户端会话状态下需要对服务器进行多大程度的控制才能修改数据?假设他们有一个sessionID和一个ASPAUTH cookie。
例如:
远程攻击,如修改后的POST或其他处理程序调用 页?
攻击者能否以编程方式访问IIS(WMI mabey?) 能够在相同或另一个应用程序池的内存中访问和更改会话状态吗?
攻击者是否需要能够将代码发布到我的应用中,以便操纵会话内存?
我知道这些问题通常依赖于我的代码中的错误,所以无论如何都假设我编写了最糟糕,最不安全的代码(我没有,但是......)并且做了像更改会话这样的事情在构造函数或生命周期事件中。
答案 0 :(得分:2)
由于我们并不确切知道您的代码是如何实现的,因此我们所能做的只是猜测。
首先,Session永远不应该用于安全敏感的事情。是的,客户无法直接阅读会话,还有其他因素需要考虑。
还有许多其他更合适的方法可以做你想要的,Session是 NEVER 一个合适的方法。
其他合适的方法包括......
答案 1 :(得分:1)
会话变量可能存在安全风险。保护会话变量总是更好。
您应该考虑几个链接......
确保会话状态 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
我同意Erik的意见。
问候