今天需要获取到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:

1
2
3
4
5
6
7
8
9
10
11
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:

1
2
3
4
5
6
7
8
9
10
11
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"))

通过计算即可得出