在一次性使用Web应用程序中生成随机的基于URL的密钥而不是用户/密码是否可以?

时间:2015-12-23 00:07:11

标签: security web-applications login passwords

假设我们有一个客户端访问我们的应用程序的Web应用程序。 他在我们的应用程序上工作了几个小时/天,再也没有回来!在这个应用程序中,客户端可以发送/接收敏感信息。

尽管用户名/密码可能很好,但我们都知道密码很糟糕,因为我们的头脑不是一个好的随机生成器,它不能保存随机数据,而且客户端懒得使用一个好的密码。正常的8个ascii字符密码只有32位,只有当我们真正随机选择8个字符时! (例如以下从未发生的ASCII字符:\ 34 \ 86 \ 121 \ 8 \ 43 \ 0 \ 8 \ 27)

因此,我们正考虑从/ dev / urandom生成256位随机值,并通过电子邮件发送。这样,我们就拥有了一个非常长且好的随机密钥,而不是一个简短的,(几乎)可猜测的密码。

这样,破解系统的唯一方法就是访问客户端电子邮件(如果攻击者可以访问客户端电子邮件,可以使用我们的密码重置工具并在一分钟内访问我们的Web应用程序),客户端也可以保存URL +密钥在一个文件/纸上(这也可能与密码一起发生!)或者以某种方式泄漏它,比如屏幕截图等...

如果这是一个很好的解决方案,我们如何才能获得更高的安全性? 我们在考虑:

  1. 使用SSL
  2. 使用/ dev / urandom中的长随机密钥(256位/ 32个二进制字节/ 64个十六进制字符)
  3. 按HTTP标头停用浏览器/代理缓存
  4. 在整个子域中禁用搜索引擎索引
  5. 使用<a href="url+key">LOGIN</a>隐藏密钥,并将客户端重定向到URL /面板等页面,以避免出现屏幕截图问题。
  6. 你说,拜托?

1 个答案:

答案 0 :(得分:1)

我的看法是,如果您的密钥真的是随机的并且在后端验证,那么您不应该有任何问题。 Https可能对登录验证后的过程中提交的信息有利,但是...如果足够大且真正随机(例如,使用用户名或密码或电子邮件进行种子验证,以便您可以在服务器上以编程方式重现密钥结束验证匹配),你非常安全。