这是我学习/理解安全(Ish)发送post数据的黑客尝试。欢迎建设性的批评。
这只是理论,并没有太多的代码。此外,我在示例中使用了PHP的SHA1(),这只是因为我花了时间来理解它的内部原理。我知道还有其他的(更好的?)算法(例如: MD5()),所以换成你最喜欢的。
1)服务器生成一个随机的salt随机数(最小,最大),根据请求将其与页面一起发送,计算并存储SHA1(un:pw:salt)以及请求的服务器时间戳(到数据库)
1a)注意: salt是可嗅探的,所以假设黑客知道salt (你能运行unsha1()命令,获取SHA1'd数据吗?)
2)用户输入用户名和密码,点击提交
3)提交(SHA1)(un:pw:SHA1)的提交函数(打包用于模糊处理,我知道,这不会增加真正的安全性),然后只将结果发布到服务器
3a)注意:加密凭证是可嗅探的
4)服务器检查接收到的凭据是否与其存储在数据库中的凭据匹配,并在初始请求后的一段时间内(5分钟左右)到达。做出允许/拒绝决定。
进一步的请求改变了盐,因此即使有人嗅探到加密的数据,在a)用户发出新的页面请求b)时间段到期之后,它也将是无用的
有什么想法?
编辑:另外,假设所有的条带标签/ SQL hacks /<>等...注入得到了适当的处理。
发布于 2011-01-27 06:56:42
使用https并转到下一个问题!
发布于 2011-01-27 06:59:41
这就是HTTP的“摘要式”身份验证的工作方式。
如果你对学习感兴趣,read more about the Digest Authentication method.
摘要式身份验证可以防止中间人获知用户密码。但是,它很容易受到攻击,其中嗅探器也可以改变流量。主动攻击者可以让用户提供凭据,但可以根据需要修改请求的正文。
此外,正如您所描述的,服务器会存储用户的密码。这很糟糕。基于密码的身份验证应该只存储从密码不可逆地派生的内容。
我建议您使用SSL并学习如何对服务器端存储的密码进行哈希处理。
https://stackoverflow.com/questions/4810884
复制相似问题