【发布时间】:2011-01-26 22:38:31
【问题描述】:
这是我学习/理解安全(ish)发送帖子数据的骇人听闻的尝试。欢迎提出建设性的批评。
这只是理论,没有多少代码。另外,我在示例中使用了 PHP 的 SHA1(),只是因为我花时间了解了它的内部结构。我知道还有其他(更好的?)算法(例如:MD5())所以换成你最喜欢的。
1) 服务器生成随机盐 rand(min, max),根据请求将其与页面一起发送,计算并存储 SHA1(un:pw:salt) 以及请求的服务器时间戳(到数据库)
1a) 注意:salt 是可嗅探的,所以假设黑客知道 salt(你能取消 SHA1() 的东西,以获取 SHA1 的数据吗?)
2) 用户输入用户名和密码点击提交
3) 提交会触发一个 SHA1(un:pw:salt) 的 JavaScript 函数(为混淆而打包,是的,我知道,这不会增加真正的安全性),然后只将结果发布到服务器
3a) 注意:加密的凭证是可嗅探的
4) 服务器检查接收到的凭据是否与它存储在数据库中的凭据匹配,并到达 在初始请求后的一个时间范围内(5 分钟左右)。做出允许/拒绝决定。
进一步的请求会改变盐,所以即使有人嗅到了加密数据,它也无用 a) 用户提出新页面请求 b) 期限到期
想法?
编辑:另外,假设所有的条形标签/SQL hacks/等...注入都得到了适当的处理。
【问题讨论】:
-
我认为只有使用 https 才是真正的安全
-
是的,当然除非。好点。
-
您不能“un-sha1”某些东西来获取密码。这是一个不可逆的散列函数,所以你必须暴力破解散列。 (哦,md5 被认为不太安全。)