00后老程序员不讲武德 偷袭 猿人学第二题解题记录 match/2

我是一个00后的老程序员,半夜00点有个Python群友发来一个题目,我以为是leetcode算法题呢,这不轻而易举、手到擒来、简简单单、有手就行,哪怕是博利叶排序我也能招架得住啊,结果发来一个链接。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题发出来了,做这个题花了约2个小时半。

这是做完截的图
在这里插入图片描述

说说我的思路:
首先我刚看到页面,非常简陋。
在这里插入图片描述
看了看题目,让我拿1~5页的数据
在这里插入图片描述
打开检查元素,发现请求接口获取的数据,page1~5

发现需要cookie
在这里插入图片描述
发现cookie超时非常短
在这里插入图片描述
于是打开刷新页面看看后端如何返回的cookie,一般情况下都是Set-Cookie Header头,但是它没有。

有趣的是这个页面是加了防debug的,我直接用edge给他关了。

在这里插入图片描述
于是,我测试接口,发现提示cookie超时与后端有关,我以为是前端判断(因为cookie是前端生成的),那么,cookie肯定通过某种方式注册到了后端
在这里插入图片描述
发现有个loginInfo接口,我以为是cookie注册的接口,然后我尝试调用该接口,设置Header头的cookie为随意值,发现并不是,我设置的随意的cookie并不生效,不知道用来干嘛的。
在这里插入图片描述
ps:貌似请求列表的接口会延长cookie超时时间,但是仍然会超时(最大超时时间)而不请求列表,超时会更快。

此时我有点儿焦躁了,因为我需要通过对方的js获取cookie生成逻辑。

找到了jquery.cookie.mini.js我一看,这简单啊,老方法,先用edge本地替换该js,然后修改该js代码打印cookie出来看看,再说下一步。
使用本地副本替代网页资源 (“替代”选项卡)

ps:为什么说老方法,之前破解一个前端接口传参都加密的网站,那个网站调用了加密库,我直接替换加密库,把密码打印了出来。

在这里插入图片描述
但是我发现,设置cookie的代码没调用这个js文件。

此时我计划落空,非常焦躁。

然后,我还点击了4和5页,弹出一堆话,让我设置什么。没看懂。
在这里插入图片描述
ps:我找到了除jquery.cookie.mini.js之外的另一个可能携带cookie生成逻辑的js文件,但是那个js很长,这种题,实在是没有什么大兴趣逆向那么大的js。要是有个小姐姐奖励我或许可以考虑。
在这里插入图片描述
现在来看,也许逻辑就在html里的script标签,这也说不定。

我又想到了一个鬼点子,我写了个js,会获取cookie发送到一个服务。
在这里插入图片描述

const cookieValue = document.cookie;
const url = `http://127.0.0.1:5000/?data=${
      
      cookieValue}`;
fetch(url);

我python起了个服务,接收发来的cookie,然后请求5页,获得数据。

from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/', methods=['GET'])
def set_cookie():
    cookie = request.args.get('data')
    total_value = 0
    for page in range(1, 6):
        url = f'https://match.yuanrenxue.cn/api/match/2?page={
      
      page}'
        headers = {
    
    
            'cookie': cookie,
            'referer': 'https://match.yuanrenxue.cn/match/2',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.36',
            'x-requested-with': 'XMLHttpRequest'
        }
        response = requests.get(url, headers=headers)
        print(response.json())
        data_list = response.json()['data']
        for item in data_list:
            total_value += item['value']
        print('第{page}页的总和为{total_value}'.format(page=page, total_value=total_value))
    print (total_value)
    return str(total_value)

if __name__ == '__main__':
    app.run(debug=True)

看上去成功了,就是不知道加出来的值对不对。
在这里插入图片描述

对不对问群友:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看上去是对了

后记

正经爬虫,解密js比较好,这样能获取cookie计算方法

或者,python好像有那种库,把js放python里运行,不解密,稍微修改下让它输出cookie出来。

或者用我这种方法,想办法控制浏览器,python检测到cookie有问题,让浏览器刷新。

ps:比如,在js中轮询请求python,python发现cookie不能使用则返回一个值,js接收到值则刷新页面。

总之,依托答辩

cookie不可能前端计算,不安全

爬虫和盗号,爬虫是小事情

防止爬虫参考淘宝,搞一个人机验证码。
账户还得是JWTtoken

我记得淘宝发现是爬虫之后,它会返回重复的数据

其他顾虑

授人以鱼不如授人以渔,哪怕你通过我的文章实现了,拿到了最终的结果,都是一种进步,不要照抄答案,为此我已经涂掉答案的数字了。

哪怕你跑个代码,都是一种进步,我觉得我把思路发出来,也是为了更精进,你们可以锦上添花,没有人是万丈高楼平地起,一切只能靠自己的;都是站在巨人的肩膀上,继续前进。

总得来说这题没什么水平,不符合实际,实际应该解决的是人机验证码问题。

猜你喜欢

转载自blog.csdn.net/Deng_Xian_Sheng/article/details/133468921