javascript - 有什么办法避免网页被嗅探密码(中间人攻击)?

 鱼影沫1457 发布于 2022-11-30 18:14

中间人攻击的方法(别用来做坏事哦):
Ubuntu 14.04 在Wifi环境下实施中间人攻击偷取用户名和密码
嗅探的结果是:

针对几个著名的IT企业进行测试:
可以抓到明文密码:163邮箱,京东,12306,Acfun
可以抓到前端加密后的密码:百度贴吧,淘宝手机版
不可以抓:QQ邮箱,淘宝电脑版,Bilibili

然后是几乎所有的小网站都不带https的,可以随便抓
本博客是带有https小绿锁的哦~(虽然没什么卵用)

针对第二种情况,虽然抓不到明文密码,但是可以抓到Cookie,通过Cookie也是可以登录的
第三种情况是连网页都打不开 QAQ

使用HTTPS和在前端用JavaScript加密密码之后可以在一定程度上防止嗅探密码,但是即使你的Cookie是HTTP Only的也是能被嗅探到的。
那么怎样才能防止中间人攻击嗅探到密码?
或者说像BiliBili这样的网站使用的是什么黑科技

3 个回答
  • B站 dologin 表单:
    都是纯HTTP请求拦截很轻松

    真正防止中间人除了HTTPS不要想别的,已经被无数的人证实过了。js加密纯粹掩耳盗铃一叶障目的事。

    act:login
    gourl:https://passport.bilibili.com/login/dologin
    keeptime:2592000
    userid:asfd
    pwd:caGoN962DTSWqluWDKtUfj+l5RfDJEVQ7+y963RH/pWHs7xpJh/0mhSv73ma6TF8pxUuNiOqis6YQKGJYK1bTdvZBISbro4Iv2L9S0FWz8MF79I8Pq36uWdSyYaaTFTHOf2pn1UXWufqB/xCc4Jltl3unMNF26M2u7CFI//V2SQ=
    vdcode:asdf

    关键JS代码

        window.$ = require("jquery");
        require("jquery-autocomplete");
        var popup = require("popup");
        var qrcode = require('qrcode');
        var mng = require("mng");
        var crypt = require("jsencrypt"); <<<<<<<<<
        require("jvalidate")($);
        var captchaUrl = '/captcha';
    

    https://static-s.bilibili.com/passport/seajs/plugin/jsencrypt.min.js

    /**
         * 加密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;
        }
    2022-11-30 20:10 回答
  • 网络协议学得不怎么好,抛砖引玉
    这个是 劫持了 TCP/IP 的流量吧, HTTP本来就是明文的,在HTTP协议上是做不了什么的,只能上HTTPS
    猜测是第三种情况根本就没有给 HTTP的登录入口,要么HTTPS,要么就没法登录。

    2022-11-30 20:10 回答
  • 丢cookie没什么好办法,防丢密码可以考虑以下方法(该例子适用于数据库中的用户密码也是采用的md5加密):
    1- 生成表单时产生一个随机key,这个key也同时保存在服务端(就像图形验证码)
    2- 提交表单时先把密码md5,然后与key连接,再次md5,然后发送
    3- 服务器端根据用户名取得密码,密码与key连接后md5并与提交的密码对比

    2022-11-30 20:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有