博客园登录机制

博客园的登录机制是非常安全的。

登录链接为:https://passport.cnblogs.com/user/signin
该页上主要的js为<script src="/scripts/signin_bundle.js?v=6bCaxODGR5KIkQhpigY5PlgW0FSYoJikUQ5l4hNlWIc1"></script>
主要函数为

function signinGo() {
    var r, u, f, e, n, i;
    if (!is_in_progress) {
        if ($("#tip_input1").html(""), $("#tip_input2").html(""), r = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKJPFz0k33Xq4fCKDNQpn/ttUhLLmajOKBhVe0idsvk3rrNN6N5ESosOpd+jZ+8DQrwGQKGbDd8is5qBi5egRa6fJvTxIxj55ZkuhUmcSHMJd9CpDQhZ/9Vmh8N3/lHailfoWZTwD9SDsVqlLrqnmHBKqbzJ7q5mR09LgciUkgkwIDAQAB", u = $.trim($("#input1").val()), !u) {
            $("#tip_input1").html("请输入登录用户名");
            $("#input1").focus();
            return
        }
        if (f = $.trim($("#input2").val()), !f) {
            $("#tip_input2").html("请输入密码");
            $("#input2").focus();
            return
        }
        if (enable_captcha && (e = $.trim($("#captcha_code_input").val()), !e)) {
            $("#tip_captcha_code_input").html("请输入验证码");
            $("#captcha_code_input").focus();
            return
        }
        $("#tip_btn").html("提交中...");
        n = new JSEncrypt;
        n.setPublicKey(r); 
        var o = n.encrypt($("#input1").val())
        var s = n.encrypt($("#input2").val())
        var t = {
            input1: o,
            input2: s,
            remember: $("#remember_me").prop("checked"),
            geetest_challenge: $("[name='geetest_challenge']").val(),
            geetest_validate: $("[name='geetest_validate']").val(),
            geetest_seccode: $("[name='geetest_seccode']").val()
        };
        enable_captcha && (i = $("#captcha_code_input").get(0).Captcha, t.captchaId = i.Id, t.captchaInstanceId = i.InstanceId, t.captchaUserInput = $("#captcha_code_input").val());
        is_in_progress = !0;
        $.ajax({
            url: ajax_url,
            type: "post",
            data: JSON.stringify(t),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            headers: {VerificationToken: "@TokenHeaderValue()"},
            success: function (n) {
                n.success ? ($("#tip_btn").html("登录成功,正在重定向..."), location.href = return_url) : ($("#tip_btn").html(n.message + "<br/><br/>联系 contact@cnblogs.com"), is_in_progress = !1, enable_captcha && i.ReloadImage())
            },
            error: function () {
                is_in_progress = !1;
                $("#tip_btn").html("抱歉!出错!联系 contact@cnblogs.com")
            }
        })
    }
}

其中用到了JSEncrypt这个库,博客园使用了其中的RSA加密。
RSA有两种使用方式:

  • 公钥加密、私钥解密:只有接受者(拥有私钥)才能读懂发送者(拥有公钥)加密后的密文。
    博客园采用的就是这种方式,在上面代码中,可以看见RSA的公钥,这个公钥是定期更新的。
  • 私钥加密、公钥解密:用于验证发布者,如果没有私钥,你就无法写出一封可以被公钥解密的文章来。拥有私钥,就相当于官方,就可以发布密文。别人没法冒充官方发布密文,因为它们发布的密文经过公钥解密就会变成无意义的乱码。

加密的目的是不让窃听者看到明确的用户名和密码。但是,如果单纯地使用RSA加密,加密之后的用户名和密码是固定的(因为RSA算法是确定的),如果窃听者得到了加密后的用户名和密码,那跟获得了明文没什么区别(除非更改公钥)。

为了掩人耳目,JSEncrypt的加密会给明文拼接上一个随机串,解密后只取有意义的串即可。这样其实还是无法避免上面提到的那种问题。

除了加密,博客园也有验证码机制。平时登录,我们看不见验证码,因为登录次数不太频繁,一旦登录次数频繁了,博客园就会提示输验证码了。

当登陆成功之后,就会获得若干Cookie,这些Cookie十分重要。Cookie如果泄露了,跟临时泄露密码没什么分别。如果你的Cookie都被人随意获取了,那你还有什么安全性可言?使用HTTPS能够更加安全,因为它对Cookie也是加密的,普通的HTTP有可能会泄露登录之后的cookie,那样同样是十分危险的。

用户名、密码如果泄露,除非我赶在敌手之前,赶紧修改用户名密码才能免受攻击。
公钥加密后的用户名、密码若泄露,有两种方式免受攻击:

  • 我修改用户名密码
  • 博客园公钥变了

我的登录Cookie若泄露,那就十分头疼。因为博客园是允许多地登录的,如果是单端登录(像手机微信、手机支付宝那样),一方登陆之后另一方会退出。拥有一个登录的Cookie,就拥有一切。只能等到这个Cookie失效才可以。也许更改用户名密码之后,博客园后端会自动清空登录cookie列表。

相关资料

博客园加密登录--jsencrypt
simplify the life

转载于:https://www.cnblogs.com/weiyinfu/p/7675781.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值