Medidas comunes contra el rastreo: Anti-rastreo de UA y anti-rastreo de cookies

Este artículo se comparte desde la comunidad HUAWEI CLOUD "Anti-rastreo del rastreador de Python, debe iniciarlo desde este blog, Anti-rastreo de UA, Anti-rastreo de parámetros específicos de cookies" , autor: Dream Eraser.

Es posible que haya notado que para el sitio de destino, el rastreador es un acceso de máquina.Desde el punto de vista del sitio de destino, el tráfico generado por el rastreador es todo "tráfico basura", que es completamente inútil (la cantidad de cepillado). excepto reptiles).

Con el fin de bloquear este tráfico basura, o para reducir la presión sobre sus propios servidores y evitar que el programa rastreador los afecte al uso humano normal, los desarrolladores estudiarán varios medios para los anti-rastreadores.

Los reptiles y los antirastreros son un par de relaciones simbióticas. Si hay ingenieros de reptiles, debe haber ingenieros antirastreros. Muchas veces, los ingenieros de reptiles y los ingenieros antirastreros luchan contra el ingenio .

No existe una clasificación específica para la protección contra el rastreo.Si un sitio web tiene un código contra el rastreo, generalmente utilizará varias medidas contra el rastreo combinadas.

Rastreador de información de solicitud de verificación del servidor

Esta serie de blogs comienza con el método antirrastreo más simple, el antirrastreo de nivel de entrada: el antiarrastramiento del agente de usuario "User-Agent" .

Agente de usuario

User-Agent (User-Agent) representa la información relacionada con el navegador del usuario. La lógica anti-rastreo consiste en verificar el parámetro User-Agent en el encabezado de la solicitud a través del servidor y luego distinguir si es un programa rastreador o un navegador normal. acceso.

Visite cualquier sitio web, active las herramientas de desarrollo y luego ingrese navigator.userAgent en la consola para obtener la cadena UA (cadena User-Agent).

El formato de la cadena UA generalmente se puede entender de la siguiente manera:

平台 引擎版本 浏览器版本信息
复制代码

Si lo descompone en detalle, puede obtener el siguiente formato:

浏览器标识 (操作系统标识;加密等级;浏览器语言) 引擎版本 浏览器版本信息
复制代码

De esta forma, cuando observas el contenido que se muestra en la figura anterior, es más fácil comprender su significado.

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
复制代码

En diferentes pruebas de navegador, encontrará que la cadena UA comienza con Mozilla, que es un problema heredado causado por las guerras históricas de navegadores.

A continuación se comparan las cadenas de UA de los tres principales navegadores del mercado.

# 谷歌浏览器
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
# 火狐浏览器
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
# IE11 浏览器
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
复制代码

Analizar el significado de los datos relevantes en el contenido anterior

  • Mozilla/5.0: Indica un navegador;
  • Windows NT 6.1:操作系统,我这里得到的是 Windows 7 操作系统;
  • Win64/WOW64:64 位操作系统;
  • x64:发行版本;
  • N,I,U:加密等级,这里没有出现;
  • AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36:这个如果你去研究,也有很多趣事,不过咱们理解其是浏览器的版本就可以了。

有了基本的认知之后,我们就可以任意的去编写不同的浏览器标识了(多数时候是从开发者工具中直接复制)

相应的,服务器也能从这个字符串中,识别出访问它的浏览器相关信息(其实操作系统的信息也会被携带过去,甚至它可以验证该 UA 字段是否复合特定的规则)

案例实操环节

拿 CSDN 热榜进行测试,如果不设置 UA 字段,你将获取不到任何返回数据,你可以将下述 headers 置为空值,然后查看运行结果。

import requests

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
res = requests.get('https://blog.csdn.net/phoenix/web/blog/hot-rank?page=0&pageSize=25', headers=headers)
print(res.text)
复制代码

User-Agent 生成

可以使用 Python 第三方库,pip install fake_useragent,也可以自己维护一个 UA 类。与 User-Agent 参数相同的还有 HOST 与 Referer,都可以认为的设置一些信息进行反爬。

Cookie 反爬虫

使用 Cookie 验证,也是常见的反爬,由于目标站点可遇不可求,所以接下来的内容从理论层面说明,在后续会结合复杂的案例进行实操。

Cookie 反爬虫最简单的手段

服务器端使用特殊的 Cookie 值进行验证,如果发现传递过去的 Cookie 值不存在,或者不符合生成规范,则不返回数据。

例如服务器验证固定 Cookie 字段,在前文获取热榜代码中,如果你不携带某些 Cookie 值,那得到的就不是完整的数据(可自行测试,差异值为 username)。

Otra situación es verificar si la cookie se ajusta a un determinado formato. Por ejemplo, JS genera dinámicamente la cookie y la combina con algunas reglas potenciales (acuerdo de desarrollador). Después de que el valor de la cookie se pasa al fondo, el ingeniero en segundo plano puede directamente verificar el valor Para lograr el efecto anti-rastreo, por ejemplo, la regla de cookies es 123abc123, los primeros 3 números aleatorios, los últimos 3 números aleatorios y las tres letras minúsculas aleatorias del medio, luego el ingeniero de fondo puede verificar el valor de la cookie pasado por el cliente a través del regular, ya sea que se trate de una regla compuesta o no. En caso afirmativo, devuelva la información de excepción directamente.

Por supuesto, este método es fácil de identificar y también se puede agregar una marca de tiempo. Después de que el ingeniero en segundo plano obtenga la marca de tiempo en la cookie, verificará la diferencia entre la hora actual. Si supera cierto valor, la cookie puede también se considerará falsificado.

Las cookies también se utilizan para verificar la identidad del usuario. Por ejemplo, solo se puede acceder a los datos de muchos sitios después de iniciar sesión. El motivo es que las cookies registran información del usuario. Hay muchos escenarios de aplicación para las cookies, como la página de mensajes del sistema de HUAWEI. Blog de la NUBE.

desarrollador.huaweicloud.com/usercenter/…

Después de hacer clic, saltará a la página de inicio de sesión, pero si visita con una cookie en el encabezado de la solicitud, obtendrá el contenido correspondiente. El campo de cookie más importante es HWS_ID. El código de prueba es el siguiente. Puede copiar el correspondiente cookie de las herramientas del desarrollador.campo para acceder a esta página.

import requests
from lxml import etree

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
    "cookie": '你的HWS_ID Cookie值;'
}
res = requests.get('https://developer.huaweicloud.com/usercenter/mysysmessage', headers=headers, allow_redirects=False)
with open("./1.html", "w", encoding="utf-8") as f:
    f.write(res.text)
elements = etree.HTML(res.text)
print(elements.xpath("//title/text()"))
复制代码

Haga clic en Seguir para conocer las nuevas tecnologías de HUAWEI CLOUD por primera vez~

Supongo que te gusta

Origin juejin.im/post/7079979478402727950
Recomendado
Clasificación