频道栏目
首页 > 资讯 > HTML/CSS > 正文

关于Web前端密码加密是否有意义的分析讲解

17-12-12        来源:[db:作者]  
收藏   我要投稿

起因:是一个90后团队搞的一个流氓公司,做 Mac 下的盗版应用商场,被骂了一通,同时调侃 http 协议明文传输用户名密码,太低级。后来有个人站出来,提出“前端对数据进行加密没有意义”这个观点。后来就是的骂战了。

无意义说:密码在前端加密完全没有意义,对密码系统的安全性不会有任何提高,反而会引发不必要的麻烦。

(1)加密了也无法解决重放的问题,你发给服务器端的虽然是加密后的数据,但是黑客拦截之后,把加密之后的数据重发一遍,依然是验证通过的。直接监听到你所谓的密文,然后用脚本发起一个http请求就可以登录上去了。

http在网络上是明文传输的,代理和网关都能够看到所有的数据,在同一局域网内也可以被嗅探到,你可以开个wireshark抓下局域网的包试试看。加密也没有提高什么攻击难度,因为攻击者就没必要去解密原始密码,能登录上去就表示目标已经实现了,所以,难度没有提高。

(2)既然是加密,那么加密用的密钥和算法肯定是保存在前端的,攻击者通过查看源码就能得到算法和密钥。除非你是通过做浏览器插件,将算法和密钥封装在插件中,然后加密的时候明文混淆上时间戳,这样即使黑客拦截到了请求数据,进行重放过程时,也会很快失效。

有必要说:

(1)明文传输的是第三方的密码:Apple ID 与密码。因为这个是用户在另一个网站的数据,如果加密之后,虽然攻击者可以通过重放攻击重新进行登录,但是加密情况下无法获取到原始的 Apple ID 的账号和密码。不加密的话如果HTTP请求被拦截的话就可以知道用户的原始密码了,这是一件要不得的事情。于你网站本身来说,这个问题应该不大,因为如果被拦截了,不管怎样拦截者只要查看源码,模拟请求之后都能登陆上。但是因为很多用户目前来说基本上来说不会一个网站一个密码,而是对应着多个账户的。所以如果知道了用户的原始密码,结合社会工程学,能干的事情就挺多了。

(2)加密更安全,不是为了完全阻挡攻击,而是为了提高攻击的成本,降低被攻下的概率。

QQ 网页上的登陆模块(全程HTTP/GET请求):

[javascript]view plaincopy

functiongetEncryption(password,uin,vcode,isMd5){

varstr1=hexchar2bin(isMd5?password:md5(password));

varstr2=md5(str1+uin);

varstr3=md5(str2+vcode.toUpperCase());

returnstr3

}

password:密码

uin:用户名

vcode:验证码

白话就是: md5(md5(md5(密码) + 用户的QQ号) + 验证码)

验证码是一次性的, 所以,在你在网络层拿到本次的请求之后,无法做 重放攻击, 因为验证码是不正确的.加入验证码的作用:防止软件恶意注册,防止暴力破解密码,防止网络爬虫,Google利用验证码,让用户帮他实现图片的识别。

而当你获取新的验证码, 但你并不知道 组合之前的内容[md5(md5(密码) + 用户的QQ号)] 是什么 , 所以你无法重新发送本次请求实现登陆的目的.

至于 服务端的校验, 只要将记录下来的MD5值(而不是记录的明文), 进行同样的运算, 得到的结果与提交上来的一样, 即密码正确.

安全点的方法:通过https协议提交登录数据,这样黑客抓包时得到的数据是加密的,而且无法反解。

相关TAG标签
上一篇:爬格子“编程题”实例
下一篇:jQuery的使用、jquery选择器、jquery完善的处理机制代码实例
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站