乐趣区

关于安全:简单更新一篇设备指纹获取原理

前言: 明天是星期一,大家都应该晓得,这种日子,出于人道主义和人体结构,是不应该工作的。我的左半脑还沉迷在周末的高兴之中,右半脑在为接下来五天而发愁。所以,来写篇短文摸个鱼吧。

设施指纹定义

设施指纹通过用户上网设施的硬件、网络、环境等特色信息生成设施的惟一标识,可无效辨认模拟器、刷机改机、Root、越狱、劫持注入等危险。就设施指纹的发展史来看,设施指纹从原来的 IP 到当初的设施指纹,其中的技术和安全性都有很大的进步。

获取原理

获取设施指纹的原理是利用设备的各种属性和特色,包含硬件、操作系统、网络设置、浏览器配置和插件等信息,对设施进行唯一性的标识和辨认。

设施指纹获取原理是基于设施自身的属性和特色来实现的,因而能够在不依赖用户身份信息的状况下,对设施进行唯一性的标识和辨认,利用于广告追踪、反欺诈、用户行为剖析等畛域。

通常来说,个别会波及到以下步骤:

1. 收集设施信息:收集与设施相干的各种信息,包含硬件信息(如 CPU、GPU、内存、存储器等)、操作系统信息(如操作系统版本、语言、时区等)、浏览器信息(如用户代理字符串、插件、字体等)以及网络信息(如 IP 地址、DNS 设置等)等。

2. 加工信息:将收集到的设施信息进行解决和加工,提取设施的特色和属性,如操作系统位数、浏览器版本、屏幕分辨率、插件列表、语言设置等等。

3. 生成设施指纹:依据加工后的设施信息,生成设施指纹,并将其存储到服务器或本地数据库中,用于后续的设施辨认和跟踪。

4. 设施指纹更新:设施指纹可能会因为硬件或软件的变动而发生变化,因而须要定期更新和验证设施指纹,以确保设施的唯一性和准确性。

具体代码实现

import hashlib
import json
import os

# 收集设施信息
def collect_device_info():
    info = {}
    info['platform'] = os.name
    info['hostname'] = os.uname()[1]
    info['os'] = os.uname()[0] + ' ' + os.uname()[3]
    info['browser'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    return info

# 加工信息
def process_info(info):
    processed_info = {}
    processed_info['platform'] = info['platform']
    processed_info['os'] = info['os']
    processed_info['browser'] = info['browser']
    return processed_info

# 生成设施指纹
def generate_fingerprint(info):
    processed_info = process_info(info)
    json_info = json.dumps(processed_info, sort_keys=True)
    fingerprint = hashlib.md5(json_info.encode('utf-8')).hexdigest()
    return fingerprint

# 测试
if __name__ == '__main__':
    info = collect_device_info()
    fingerprint = generate_fingerprint(info)
    print(fingerprint)

其实只是一个很简略的应用 Python 内置的库进行设施信息的收集和解决的过程,其中应用了 MD5 算法生成设施指纹。

如果有企业理论须要,其实最好是在此基础之上,去做优化和降级。

当然,最简略的形式,就是找一个现成的设施指纹零碎:顶象设施指纹

退出移动版