Python爬虫—破解JS加密的Cookie

news/2024/10/18 7:49:09/

前言

在进行网站数据爬取时,很多网站会使用JS加密来保护Cookie的安全性,而为了防止被网站反爬虫机制识别出来,我们通常需要使用代理IP来隐藏我们的真实IP地址。

 

本篇文章将介绍如何结合代理IP破解JS加密的Cookie,主要包括以下几个方面:

  • 什么是Cookie
  • 什么是JS加密的Cookie
  • 什么是代理IP
  • 破解JS加密的Cookie的方法及实现
  • 如何使用代理IP进行网站数据爬取

首先,我们来了解一下什么是Cookie。

1. 什么是Cookie

Cookie是服务器向客户端发送的一小段数据,客户端将其存储在本地,下次请求时会将这个数据发送给服务器,用于识别用户身份、保存用户设置等。

我们可以通过浏览器的开发者工具查看网站的Cookie信息。

在Chrome浏览器中,可以通过F12进入开发者工具,在Application选项卡下的Cookies中查看网站的Cookie信息。

2. 什么是JS加密的Cookie

为了增强Cookie的安全性,很多网站会使用JS加密来保护Cookie。JS加密的原理是在服务器端生成一个密钥,并将其传递给客户端,客户端将原始Cookie值使用密钥进行加密后发送给服务器,服务器接收到加密的Cookie值后使用密钥进行解密。

这样,即使Cookie被截获,也无法被恶意用户轻易地解密。

下面是一个使用JS加密的Cookie的例子:

function encryptCookie(value, secretKey) {return CryptoJS.AES.encrypt(value, secretKey).toString();
}
var secretKey = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encryptCookie(value, secretKey);

在上面的代码中,encryptCookie函数使用CryptoJS库对原始Cookie值进行AES加密,而secretKey是在服务器端生成的密钥。

3. 什么是代理IP

代理IP是一个位于我们计算机和互联网之间的中间人,我们通过代理服务器发送请求,代理服务器再将请求发送给目标服务器,从而隐藏我们的真实IP地址和位置。

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,从而提高我们的爬取成功率。

4. 破解JS加密的Cookie的方法及实现

破解JS加密的Cookie的方法有很多种,这里我们介绍一种比较简单的方法。

首先,我们需要找到网站使用的JS加密算法及密钥。我们可以通过查看网站源码或者使用浏览器的开发者工具来获取这些信息。

下面是一个使用CryptoJS库进行AES加密的例子:

function encrypt(value, key) {return CryptoJS.AES.encrypt(value, key).toString();
}
var key = 'a2V5c29uYWx1ZQ==';
var value = 'username=JohnDoe';
document.cookie = 'auth=' + encrypt(value, key);

在上面的代码中,key就是服务器端生成的密钥,我们可以将其复制下来。

接着,我们需要写一个脚本来破解加密的Cookie。具体实现如下:

import requests
import re
import base64
from Crypto.Cipher import AES# 构造请求头和代理IP
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://username:password@ip:port','https': 'http://username:password@ip:port'}# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)# 获取密钥和加密后的Cookie值
pattern = re.compile('var key = \'(.*?)\';.*?document.cookie = \'auth=(.*?)\';', re.S)
result = re.search(pattern, response.text)
key = base64.b64decode(result.group(1))
cipher_text = base64.b64decode(result.group(2))# 解密Cookie值
cipher = AES.new(key, AES.MODE_ECB)
plain_text = cipher.decrypt(cipher_text).decode('utf-8').rstrip('\0')# 输出解密后的Cookie值
print(plain_text)

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站源码,使用正则表达式获取密钥和加密后的Cookie值。接着,我们使用base64库对密钥和加密后的Cookie值进行解码,再使用Crypto库的AES模块进行解密。

最后,我们将解密后的Cookie值输出即可。

需要注意的是,由于JS加密的Cookie的安全性比较高,因此破解的成功率较低,需要根据具体情况进行调整。同时,破解JS加密的Cookie也会涉及到一些法律问题,我们需要在遵守法律的前提下进行破解。

5. 如何使用代理IP进行网站数据爬取

使用代理IP可以有效地防止网站反爬虫机制对我们进行识别和封禁,但同时也会带来一些问题,比如代理IP的稳定性和质量等。

在使用代理IP进行网站数据爬取时,我们需要注意以下几点:

  1. 选择稳定的代理IP供应商,确保代理IP的质量和稳定性。
  2. 对代理IP进行定期检测,以确保代理IP的可用性。
  3. 避免频繁地使用同一个代理IP,以免被目标网站识别出来。
  4. 如需使用多个代理IP,可以使用代理IP池来管理代理IP,定时删除不可用的代理IP并添加新的代理IP。

下面是一个使用代理IP进行网站数据爬取的例子:

import requests# 构造请求头和代理IP
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://username:password@ip:port','https': 'http://username:password@ip:port'}# 发送请求
url = 'http://example.com'
response = requests.get(url, headers=headers, proxies=proxies)# 解析返回的数据
data = response.text

在上面的代码中,我们首先构造了请求头和代理IP,然后发送一个GET请求获取网站数据。需要注意的是,调用requests库时需要指定proxies参数,将代理IP加入到请求中。

最后,我们可以解析返回的数据并做相应的处理。

总结

本篇文章介绍了如何结合代理IP破解JS加密的Cookie和如何使用代理IP进行网站数据爬取,希望对大家有所帮助。


http://www.ppmy.cn/news/1003125.html

相关文章

vscode如何退出/切换 github 账号

退出/切换 github 账号 左下角点击头像按钮,选择注销,然后再重新登录

【Spring】(二)从零开始的 Spring 项目搭建与使用

文章目录 前言一、Spring 项目的创建1.1 创建 Maven 项目1.2 添加 Spring 框架支持1.3 添加启动类 二、储存 Bean 对象2.1 创建 Bean2.1 将 Bean 注册到 Spring 容器 三、获取并使用 Bean 对象3.1 获取Spring 上下文3.2 ApplicationContext 和 BeanFactory 的区别3.3 获取指定的…

Vue3 watch监听器

概览:watch监听器的定义以及使用场景。在vue3中的监听器的使用方式,watch的三个参数,以及进一步了解第一个参数可以是一个属性,也可以是一个数组的形式包含多个属性。 watch在vue3和vue2中的使用: vue3中&#xff1a…

G1和CMS

G1垃圾回收器要点: 1.什么是G1垃圾回收器: G1是一款专门针对于拥有多核处理器和大内存的机器的收集器,在满足了GC响应时间的延迟可控的情况下,也会尽可能提高的程序的吞吐量 2.G1垃圾回收器的优点: ①与CMS收集器一…

Docker入门之命令

Docker命令学习方式 docker -h docker run --help # 这种形式参考 # 官方帮助 # https://docs.docker.com/reference/ Docker中命令是一等公民, 容器是为命令服务的,甚至启动容器都是为了执行一个命令 run docker run -i -t --name c1 centos:latest bash # 翻译: docker ru…

【零基础学Rust | 基础系列 | Cargo工具】Cargo介绍及使用

文章目录 前言一,Cargo介绍1,Cargo安装2,创建Rust项目2,编译项目:3,运行项目:4,测试项目:5,更新项目的依赖:6,生成项目的文档&#xf…

《Ansible自动化工具篇:Centos操作系统基于ansible工具一键远程离线部署之K8S1.24.12二进制版集群》

一、部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署二进制版K8S集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了 基于a…

为Android构建现代应用——应用导航设计

在前一章节的实现中,Skeleton: Main structure,我们留下了几个 Jetpack 架构组件,这些组件将在本章中使用,例如 Composables、ViewModels、Navigation 和 Hilt。此外,我们还通过 Scaffold 集成了 TopAppBar 和 BottomA…