ASP Classic用户登录系统密码安全注意事项?

Posted

技术标签:

【中文标题】ASP Classic用户登录系统密码安全注意事项?【英文标题】:ASP Classic user login system password security considerations? 【发布时间】:2014-11-20 15:55:19 【问题描述】:

全部,

我目前正在设计一个经典的 ASP 用户帐户系统...不要判断,这是我喜欢的 ;)。我已经构建了几个组件,包括 UI、数据库表、CRUD 数据库 ASP 页面和一个通用邮件程序。我很好奇为 ASP 实现安全登录系统的一些最佳实践。搜索网络会产生大量“简单的 ASP 安全”解决方案,我以前使用过这些解决方案,但这是我第一次构建强大且真正安全的解决方案。最终实现将用于工作申请系统,因此由于内容的原因,它肯定需要安全。

到目前为止,我有:

密码恢复/重置仅用于存档的电子邮件帐户 在数据库中散列存储密码 不要对会话 cookie 设置过期时间,以便它们只存储在内存中(今天在某处阅读) 获取服务器证书并使用 https

我有几个一般性问题...

    在表单中提交密码会通过查询字符串传递。在提交表单之前我是否需要以某种方式对其进行哈希处理?

    1234563我正在使用 AJAX 解析来自发送表单的查询字符串并将其传递给连接到数据库并执行 CRUD 操作的 ASP 页面。

【问题讨论】:

【参考方案1】:

密码恢复/重置仅用于存档的电子邮件帐户

确保您的发送重置链接在特定时间后或已使用后过期,以先到者为准

散列存储在数据库中的密码

使用盐而不是普通哈希。大多数常见密码的哈希值就像google search 一样容易破解。

不要对会话 cookie 设置过期时间,以便它们仅存储在 记忆(今天在某处读到)

这将确保在用户关闭浏览器时清除 cookie。除此之外,还要考虑服务器端会话 cookie 的超时,这将在 x 分钟不活动后使用户会话超时。

获取服务器证书并使用 https

至少,登录凭据绝对需要通过 SSL 传递。这也将有助于让整个网站都在 https 上,而不仅仅是登录页面。 SSL 不再是 computationally expensive anymore。让整个站点通过 SSL 可以防止任何sslstrip attacks。确保您的服务器不支持 SSLv3 以防止最近的poodle 攻击。

在表单中提交密码通过查询字符串传递。 在提交表单之前我需要以某种方式对此进行哈希处理吗?

    请不要通过查询字符串传递凭据。登录表单应始终发布。如果作为查询字符串附加到 URL,它将被缓存在服务器日志(和任何代理日志)中。

    如果您通过 https 发布表单(您绝对应该这样做),则无需在提交表单之前进行哈希处理。如果您不使用 https,则无法将凭据安全地传递给服务器。

在相关说明中...如果我使用的是 https,因为它已经是安全的, 我可以在处理写入的 ASP 页面上进行哈希处理吗? 数据库?我正在使用 AJAX 来解析来自发送的查询字符串 表单并将其传递给连接到数据库的 ASP 页面,然后 执行 CRUD 操作。

散列应该总是在服务器端完成。如果您在客户端散列密码并通过 http 以纯文本形式发送,MITM 可能无法从散列中反转密码,但他始终可以使用相同的散列登录到用户的帐户。在这种情况下,哈希本质上变成了用户的纯文本密码。

【讨论】:

我只会添加一个指向此 SO 帖子 ***.com/questions/323200/… 的链接,只是为了详细说明为什么不通过查询字符串传递密码。 好建议,好答案! +1 所有伟大的建议。谢谢! 我对始终发布登录信息(无 AJAX)的部分特别感兴趣。我不知道,我相信这会让我省去很多麻烦!关于做盐,你能推荐什么作为一个好的 ASP 功能?我还将密码发送回管理员可见的用户表,所以我想只要我在 https 中,我就可以在服务器端脱盐,然后再发回?我目前正在使用 AJAX 在我工作的“不安全”版本中执行此操作。由于它只是 div 中的纯文本,我想这还可以吗?抱歉所有问题! 哈希是一种单向过程,所以没有什么比脱盐更重要的了。加盐散列的工作方式是您获取密码,向其中添加随机字符串(盐),然后对其进行散列(查找 SHA1 实现的 ASP)。请注意,您将在数据库中存储哈希和盐。接下来,当您必须验证用户提供的密码时,您对用户密码执行相同的操作,即从数据库中获取盐,将其附加到用户提供的密码并对其进行哈希处理。如果生成的哈希值与您在 db 中的值匹配,则密码正确,您可以让用户进入。【参考方案2】:

请务必始终使用带有 SSL 的 HTTP POST。

保护您的 asp 代码免受 sql 注入。

使用加密令牌存储本地 cookie,以使您的用户在关闭会话/浏览器后保持登录状态 - 或使用 asp 会话进行单次登录,该登录可能在上次请求后 20 分钟或关闭浏览器时过期。

保护您的 cookie 免受 cookie/会话劫持。 (http://en.wikipedia.org/wiki/Session_hijacking)

此外,您可以通过请求/存储/验证服务器变量(例如用户代理的一部分)来使用用户的指纹。

【讨论】:

以上是关于ASP Classic用户登录系统密码安全注意事项?的主要内容,如果未能解决你的问题,请参考以下文章

ASP Classic 中的事务问题

ASP.NET MVC 4 和会话安全漏洞

12asp.net=============用户登录系统

PHP获取windows登录的用户名及密码

ASP.NET 如何控制用户绕过登录直接进入登录后的界面?

我的 PHP 登录系统有多安全?