中间人攻击的方法(别用来做坏事哦):
Ubuntu 14.04 在Wifi环境下实施中间人攻击偷取用户名和密码
嗅探的结果是:
针对几个著名的IT企业进行测试:
可以抓到明文密码:163邮箱,京东,12306,Acfun
可以抓到前端加密后的密码:百度贴吧,淘宝手机版
不可以抓:QQ邮箱,淘宝电脑版,Bilibili然后是几乎所有的小网站都不带https的,可以随便抓
本博客是带有https小绿锁的哦~(虽然没什么卵用)针对第二种情况,虽然抓不到明文密码,但是可以抓到Cookie,通过Cookie也是可以登录的
第三种情况是连网页都打不开 QAQ
使用HTTPS和在前端用JavaScript加密密码之后可以在一定程度上防止嗅探密码,但是即使你的Cookie是HTTP Only的也是能被嗅探到的。
那么怎样才能防止中间人攻击嗅探到密码?
或者说像BiliBili这样的网站使用的是什么黑科技?
中间人攻击的方法(别用来做坏事哦):
Ubuntu 14.04 在Wifi环境下实施中间人攻击偷取用户名和密码
嗅探的结果是:
针对几个著名的IT企业进行测试:
可以抓到明文密码:163邮箱,京东,12306,Acfun
可以抓到前端加密后的密码:百度贴吧,淘宝手机版
不可以抓:QQ邮箱,淘宝电脑版,Bilibili然后是几乎所有的小网站都不带https的,可以随便抓
本博客是带有https小绿锁的哦~(虽然没什么卵用)针对第二种情况,虽然抓不到明文密码,但是可以抓到Cookie,通过Cookie也是可以登录的
第三种情况是连网页都打不开 QAQ
使用HTTPS和在前端用JavaScript加密密码之后可以在一定程度上防止嗅探密码,但是即使你的Cookie是HTTP Only的也是能被嗅探到的。
那么怎样才能防止中间人攻击嗅探到密码?
或者说像BiliBili这样的网站使用的是什么黑科技?
B站 dologin 表单:
都是纯HTTP请求拦截很轻松
真正防止中间人除了HTTPS不要想别的,已经被无数的人证实过了。js加密纯粹掩耳盗铃一叶障目的事。
<code>act:login gourl:https://passport.bilibili.com/login/dologin keeptime:2592000 userid:asfd pwd:caGoN962DTSWqluWDKtUfj+l5RfDJEVQ7+y963RH/pWHs7xpJh/0mhSv73ma6TF8pxUuNiOqis6YQKGJYK1bTdvZBISbro4Iv2L9S0FWz8MF79I8Pq36uWdSyYaaTFTHOf2pn1UXWufqB/xCc4Jltl3unMNF26M2u7CFI//V2SQ= vdcode:asdf</code>
关键JS代码
<code> window.$ = require("jquery"); require("jquery-autocomplete"); var popup = require("popup"); var qrcode = require('qrcode'); var mng = require("mng"); var crypt = require("jsencrypt"); </code>
https://static-s.bilibili.com/passport/seajs/plugin/jsencrypt.min.js
<code>/** * 加密passwd,返回加密后的passwd,加密失败返回null * @param passwd * @returns {*} */ function encryptPassword(passwd) { if (passwd.length >= 88) { return passwd; } var getKeyUrl = '/login?act=getkey'; mng.doGet(getKeyUrl, null, function (result) { if (result && result.error) { popup.alert.show('系统提示', '登录失败,服务端出现异常。'); passwd = null; } else { var jscrypt = new crypt.JSEncrypt(); jscrypt.setPublicKey(result.key); var _encPwd = jscrypt.encrypt(result.hash + passwd); passwd = _encPwd; } }); return passwd; }</code>
网络协议学得不怎么好,抛砖引玉
这个是 劫持了 TCP/IP 的流量吧, HTTP本来就是明文的,在HTTP协议上是做不了什么的,只能上HTTPS
猜测是第三种情况根本就没有给 HTTP的登录入口,要么HTTPS,要么就没法登录。
丢cookie没什么好办法,防丢密码可以考虑以下方法(该例子适用于数据库中的用户密码也是采用的md5加密):
1- 生成表单时产生一个随机key,这个key也同时保存在服务端(就像图形验证码)
2- 提交表单时先把密码md5,然后与key连接,再次md5,然后发送
3- 服务器端根据用户名取得密码,密码与key连接后md5并与提交的密码对比