首页
社区
课程
招聘
[原创] 油猴脚本之论坛刷新token
发表于: 2023-7-3 09:35 16901

[原创] 油猴脚本之论坛刷新token

2023-7-3 09:35
16901

前言

每当看到不错的帖子想收藏、点赞或者关注作者时,总是会遇到下面的问题
图片描述
看了下请求包,发现是每次请求都会带上csrf_token,但是因为token超时了所以操作失败。刷新页面后立即点赞等操作就能成功。作为一个懒癌不想每次都刷新,自然就想到写个油猴脚本在操作前先重新获取token,脚本不难,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// ==UserScript==
// @name         kanxue refresh token
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  kanxue refresh token
// @author       You
// @match        https://bbs.kanxue.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==
var jQuery = window.jQuery;
 
function RefreshToken(){
 var csrftoken = jQuery('meta[name="csrf-token"]').attr('content');
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
            if (xmlhttp.status == 200) {
                var response = jQuery(xmlhttp.responseText);
                var $csrfMeta = response.filter('meta[name="csrf-token"]');
                var new_csrftoken = $csrfMeta.attr('content');
                jQuery('meta[name="csrf-token"]').attr('content', new_csrftoken);
            }
            else if (xmlhttp.status == 400) {
                alert('There was an error 400');
            }
            else {
                alert('something else other than 200 was returned');
            }
        }
    };
 
    xmlhttp.open("GET", location.href, false);
    xmlhttp.send();
}
 
(function() {
    'use strict';
    var array = [".favorite", ".thumb" , ".follow_btn"];
    for(var i = 0; i < array.length; i++){
       jQuery(array[i]).on('click', function(event) {
       RefreshToken();
    })
    for(var j = 0; j < jQuery(array[i]).length; j++){
       var eventList = jQuery._data(jQuery(array[i])[j], "events");
       eventList.click.unshift(eventList.click.pop());
    }
 }
})();

讲下脚本为何这么写:
1.本来想用jQuery.ajax()来发包,结果发现返回包为空,对比下正常刷新页面的请求包,发现是"X-Requested-With: XMLHttpRequest"请求头导致的,所以改用XMLHttpRequest。
图片描述
图片描述
2.xmlhttp.open("GET", location.href, false)需要设置第三个参数为false,即同步请求,否则token还没来得及刷新,又会报token check error。
3.新添加的刷新token事件监听器在原监听器之后执行,所以需要调整监听器顺序,放在最前面。同时关注和点赞在侧边和底部都有,所以这两处都需要调整。

参考

https://stackoverflow.com/a/8567149
http://www.robeesworld.com/blog/67/changing-the-order-of-the-jquery-event-queue
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 12
支持
分享
最新回复 (12)
雪    币: 13671
活跃值: (16387)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
感谢分享;你为了不点那一下,写了个这么长的脚本?
2023-7-3 10:26
0
雪    币: 2398
活跃值: (2346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
pureGavin 感谢分享;你为了不点那一下,写了个这么长的脚本?
哈哈对
2023-7-3 12:05
0
雪    币: 41302
活跃值: (19670)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
欢迎多点赞
2023-7-4 13:23
0
雪    币: 21280
活跃值: (30376)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2023-7-4 13:50
1
雪    币: 2398
活跃值: (2346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

.

最后于 2023-7-4 18:56 被yeshuibo编辑 ,原因:
2023-7-4 18:55
0
雪    币: 2398
活跃值: (2346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
kanxue 欢迎多点赞[em_19]
必须的
2023-7-5 08:28
0
雪    币: 3569
活跃值: (4304)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
pureGavin 感谢分享;你为了不点那一下,写了个这么长的脚本?
哈哈哈,老强迫症了
2023-7-6 19:36
0
雪    币: 508
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
您好,请问有安卓逆向岗位兴趣吗?坐标 深圳宝安,有待回复;
2023-7-10 12:20
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
大佬 请问题个问题:
2023-7-26 21:08
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
大佬 请咨询个问题:
2023-7-26 21:08
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
大佬咨询个问题:就是如果我可以获取到对方的csrftoken情况下,有什么好的方式可以绕过同源策略的限制将csrftoken添加到请求头里面发送不。对方网站有做同源策略的限制。是一个post请求
2023-7-26 21:10
0
雪    币: 2111
活跃值: (1855)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
2023-10-7 17:13
1
游客
登录 | 注册 方可回帖
返回