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

标签 security authentication asp-classic passwords

全部,

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

到目前为止,我已经:

  • 密码恢复/重置仅适用于存档的电子邮件帐户
  • 对数据库中存储的密码进行哈希处理
  • 不要为 session cookie 设置过期时间,因此它们仅存储在内存中(今天在某处阅读此内容)
  • 获取服务器证书并使用 https

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

  1. 以表单形式提交密码会将其传递到查询字符串。在提交表单之前我需要以某种方式对其进行哈希处理吗?

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

最佳答案

Password recovery/reset goes only to the e-mail account on file

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

Hash stored passwords in the database

使用盐代替普通的哈希值。最常见密码的哈希值很容易破解,如 google search .

Do not set an expiration on session cookies so they are only stored in memory (read this somewhere today)

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

Get a certificate for the server and use https

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

Submitting the password in a form passes it through the query string. Do I need to hash this somehow prior to submitting the form?

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

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

On a related note... If I am using https, since it is already secure, can I do the hash on the ASP page that handles the write to the database? I'm using AJAX to parse the query string from the sending form and pass it to the ASP page which connects to the database and does the CRUD operations.

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

关于security - ASP Classic用户登录系统密码安全注意事项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043900/

相关文章:

c# - Asp.Net 5. Jwt token 撤销

php - 当用户遇到异常情况时注销用户

javascript - 在 QueryString 以外的页面调用上将值传递给 ASP 页面

python-3.x - 使用 Python 在桌面应用程序中安全分发 OAuth 2.0 client_secret

mysql - SQL Server 与 MySQL - 经典 ASP 中的 SQL 注入(inject)漏洞

php - 使用 cookie 恢复 session 是正确的方法吗?

php - 字段不在实体中的 Symfony2 表单

java - Java 中的简单 OpenID

mysql - 经典 ASP - 我可以丢失嵌套循环来换取连接吗?

mysql - 如果没有可用内容,则不显示菜单项