3 回答

TA贡献1806条经验 获得超5个赞
这不安全,解释原因很简单:
如果您在客户端散列密码并使用该令牌而不是密码,则攻击者将不太可能找到密码。
但是,攻击者并不需要找出密码是什么,因为您的服务器不期待任何密码更多-这是预期的令牌。并且攻击者确实知道令牌,因为它是通过未加密的HTTP发送的!
现在,有可能将某种挑战/响应形式的加密混合在一起,这意味着相同的密码将在每个请求中产生不同的令牌。但是,这将要求密码以可解密的格式存储在服务器上,这是不理想的,但可能是一个合适的折衷方案。
最后,你真的想要用户在登录你的网站之前打开javascript吗?
在任何情况下,SSL都不再昂贵或者特别难以设置解决方案

TA贡献1785条经验 获得超4个赞
我会选择这个简单的解决方案。
总结一下:
客户“我要登录”
服务器生成随机数
#S
并将其发送到客户端客户
读取用户键入的用户名和密码
计算密码的哈希值,获取
h(pw)
(这是存储在数据库中的内容)生成另一个随机数
#C
连接
h(pw) + #S + #C
并计算其哈希值,调用它h(all)
发送到服务器
username
,#C
和h(all)
服务器
从DB 检索
h(pw)'
指定username
的现在它有所有要计算的元素
h(all')
,就像客户那样if
h(all)
=h(all')
thenh(pw)
=h(pw)'
,几乎可以肯定
没有人可以重复以指定用户身份登录的请求。#S
每次都向哈希添加一个变量组件(它是基础)。#C
增加额外的噪音。
添加回答
举报