JS-qqzone/tx云登录所用g_tk/x-csrfcode获取

今天需要获取到txy的某个api接口,但是txy需要登录才能使用,需要g_tk/x-csrfcode,

这里简单介绍一下g_tk/x-csrfcode:

由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。这种数据通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。

在我们通过登录后会返回一个skey

而g_tk/x-csrfcode的值是通过skey的计算出来的

g_tk/x-csrfcode的算法:

java:

public class Security {
    public static String GetG_TK(String str) {
        int hash = 5381;

        for (int i = 0, len = str.length(); i < len; ++i) {
            hash += ((hash << 5) + (int) (char) str.charAt(i));
        }

        return (hash & 0x7fffffff) + "";
    }
}

JavaScript:

function getGTK(str) {
    var hash = 5381;
    for (var i = 0,
    len = str.length; i < len; ++i) {
        hash += (hash << 5) + str.charAt(i).charCodeAt();
    }
    return hash & 0x7fffffff;
}

alert(getGTK("skey"))

通过计算即可得出

posted @ 2021-07-02 10:08  shookm  阅读(419)  评论(0编辑  收藏  举报