2011-02-01 70 views
3

为Intranet应用程序存储用户名和SHA1登录的最佳方式是什么?在会话安全中存储登录名和密码哈希值?

会话相对安全的方式来保存像多域信息,用户名和密码哈希信息?我将它们保存为Session["data"] = customObject()

我是否需要执行任何额外的步骤才能使这些数据安全?是否存在潜在的安全问题或漏洞?某种会话注入?我应该使用一些私钥进程来锁定/打开会话数据以供阅读吗?

回答

4

无论采用哪种方式存储密码哈希都是安全的。散列密码的想法是,它不能被反向设计到密码中。这就是为什么散列密码是推荐的练习,通常存储在数据库中(即ASP.net会员提供者)。你使用加密,但恕我直言,这比哈希安全性更低。

将会话状态下的散列密码存储在inProc,sqlserver或会话服务器中都可以。存储原始密码应该是悬而未决的。

由于SHA1已被确定为不安全,您可以避免通过表单或网址信息向全球公开散列密码。我会推荐SHA256,但无论如何都不要发布哈希。

我想知道为什么你想保留这些信息。我想不出它有什么价值。一旦密码被散列后,它就不能用来将用户重新认证到不同的站点。

+0

这将是我的另一个问题:我需要存储密码信息吗?一旦我使用表单登录并确认我确实是用户XY,那么只需继续使用保存用户名而不需要密码的会话数据就可以安全使用了?如果我使用跨站点的数据,并且需要检查权限是否足够保存用户名,或者我应该每次都在单个页面上对数据库执行用户名/密码检查吗? – feronovak 2011-02-01 12:49:29

0

这取决于您的会话数据存储在哪里。如果InProc,可能不会太担心。如果在SQL服务器上,风险更大一些,但仍然是你控制之下的东西。如果由于某种原因将会话状态数据存储在页面状态中,那么您遇到了问题。