什么是浏览器指纹:10 分钟彻底了解 16 个指纹
什么是浏览器指纹:10 分钟彻底了解 16 个指纹 作者:AdsPower — 2024-04-29 整理者:gpt5.1 ℹ️ Note 虽说摘自他山,但是这是开启什么系列以来第一个合适的命题,干脆直接塞进分类充数。跑起来最重要。 简介 当你访问网站(例如社交网站 / 电商网站)时,网站可能会悄悄收集你浏览器 / 设备的各种细节 —— 比如 IP、所用操作系统、屏幕分辨率、安装字体等。 这些看似无关紧要的信息组合在一起,就可能构成一个“浏览器指纹”(browser fingerprint),使网站能够识别你为一个独特访问者 —— 即使你清除 Cookies 或启用了“隐私模式”。 理解常见的浏览器指纹项,有助于: 理解网站为何/如何“识别”你; 在使用“指纹浏览器”或“反指纹/虚拟环境”时,更理性地设计你的环境配置; 提高多个账号并行运营时(例如电商、社媒、营销等)的安全性与隐蔽性。 为什么网站要收集浏览器指纹 浏览器指纹可以让网站“记住你是谁”。即便你清除 Cookies,网站也可能通过指纹判断“你回来过”。 对于电商网站 / 社交平台,识别用户是否“真实”、是否“同人 操作多个账号”很重要,指纹就是一个重要依据。 对于需要管理多个账号(例如营销、社媒运营、电商多店铺等)的用户/团队,了解、控制指纹可以帮助减少账号关联、降低被封禁/风控的风险。 常见的 16 种浏览器指纹及其含义 以下是文章列出的 16 项指纹(fingerprint)及其作用/特性: # 指纹类型 含义 / 来源 / 作用 1 IP 地址 用于识别用户设备的网络地址,是最基础的识别方式。 2 地理位置 通过 IP 推断出用户所在国家 / 地区 /城市甚至经纬度/邮政编码等。 3 时区与当地时间 基于地理位置或系统设置,可以反映用户的“真实”或“伪装”时区信息;如果与 IP 的地理位置不一致,则可能被检测为异常。 4 User Agent(UA) 表示浏览器类型、版本、操作系统等信息,是常见且重要的指纹组成。 5 浏览器语言 浏览器设置的首选语言 (Accept-Language) 。不同语言设置也可能被用作识别。 6 字体 (Fonts) 设备安装的字体集合 — 不同用户可能安装不同字体,通过字体列表也能区分用户。 7 屏幕分辨率 包括显示器分辨率以及浏览器窗口的可视区域大小,不同显示设备和窗口设置会不同。 8 WebGL / WebGPU 通过图形 API 获取设备 GPU / 显示能力相关信息,作为硬件相关指纹的一部分。 9 媒体设备指纹 (Media Devices) 通过浏览器对音频 / 视频设备 (如麦克风、摄像头) 的检测获取硬件信息 (设备类型、标签、分辨率等)。 10 AudioContext 浏览器处理音频的能力 /特性 — 也可能因设备 /软件设置不同而不同,可用于区分用户。 11 ClientRects 浏览器在渲染网页时,对页面元素的位置、布局进行计算 — 这些布局信息(受设备/窗口/浏览器微差异影响)也可能差异显著。 12 SpeechVoices 浏览器/系统提供的语音合成 (Text-to-Speech) 选项 (语音种类、语言、性别等) — 设备不同可能有不同选项,也可作为指纹。 13 硬件并发数 (hardwareConcurrency) 表示设备处理器的逻辑核心数 (CPU 线程数),通过 navigator.hardwareConcurrency 获取 — 不同设备可能不同。 14 设备内存 (deviceMemory) 设备可用内存 (RAM) 大小 (通过 navigator.deviceMemory 获取) — 虽然该值有限制 (通常返回 2/4/6/8 之一),但仍可能被用于区分。 15 Do Not Track (DNT) 浏览器隐私设置中的 “不追踪” 标志 — 如果用户开启了 DNT,该设置也可能成为唯一性特征。 16 Canvas 指纹 (Canvas Fingerprint) 通过让浏览器在一个 <canvas> 上绘制图形/文本,然后分析其渲染结果 (轮廓/像素/抗锯齿等细节) — 因为每台设备 (硬件 + 字体 + 显卡) 不同,渲染结果可能略有不同,从而形成独特“指纹”。 使用“指纹浏览器 / 虚拟环境”保护账户安全 如果你在运营多个账号 — 比如社交媒体账号、电商店铺账号、营销账号等 — 想避免因“相同设备/环境指纹”被关联或封禁,可以考虑使用“指纹浏览器 / 虚拟浏览器环境”。例如 AdsPower 就是这样一种工具,它允许你为每个账号创建独立的浏览器环境,并对上述多个指纹项目进行自定义/模拟。 ...
lambda 引发的编程语言陈年知识回顾
偷听会议室老板拷打同事知道什么是 lambda 吗?同时我正在看一篇关于使用aws mqtt的文章,里面提到了aws lambda。我一想,lambda 不就是匿名函数吗,然后呢,似乎我并不了解他,就好像我看到一只鸟,我知道他叫布谷鸟,也许我知道他还叫大杜鹃(实际不知道,我刚刚搜的),英文名叫Cuculus canorus,但是我依旧不了解他( 费曼父亲的教导),那么我深深反思,我不知道什么是 lambda,我现在需要知道一下。 所以在这过程里,我问了一些问题,什么是 lambda、什么是 Lisp、什么是一等公民、什么是闭包、python 的 map 是啥 什么是Lambda 我有一种中国学生的特性,写东西模糊有一种框架 1. 定义 2. 内容 3. 意义 4. 展望。 感觉这很蠢,但我暂时没有更棒的方式,当然这种文章不会有展望 这个就读 Lambda λ ,希腊字母表第 11 个字母 Lambda - Wikipedia 为什么匿名函数叫 Lambda Anonymous function - Wikipedia Anonymous functions originate in the work of Alonzo Church in his invention of the lambda calculus, in which all functions are anonymous, in 1936, before electronic computers.[2] In several programming languages, anonymous functions are introduced using the keyword lambda, and anonymous functions are often referred to as lambdas or lambda abstractions. Anonymous functions have been a feature of programming languages since Lisp in 1958, and a growing number of modern programming languages support anonymous functions. ...
凌晨总是那么美妙,那种静谧。
凌晨总是那么美妙,那种静谧。 一个人洗完澡,喝杯水,身上保持干爽,头脑略微犯困却又不至于昏昏沉沉,反而是更加灵敏的时候,看点书在这个时候最棒最棒了,有一种独坐在宇宙中心尽情汲取能量的感觉。 今晚看了一点点故园风雨后,翻开过三四次,每次五六页,还不足以启动这趟新的旅程,就像推动静止物体所需的力,大于物体在运动过程中推动他的力一样,需要一段启动的过程。 书讲什么的,没仔细看,只是看评价不错,尺寸小小的,深得我意。开篇描述战争期间军士官的自述,我虽然选择过学历史,可是我不爱记也不爱特意了解,读的书也少,肚子里没啥货,所以我也不知道背景是什么战争,有提到希特勒,那就是二战了,我不特意了解太多背景,像是预习或者调研,有时候看书爱保留一些朦胧感。看书时像品红酒一样,其实不必要知道太多背景,那是他的title or tag,可以先来一口,闻一闻,抿一抿,酒总是刺痛滚进喉咙,除了米酒会给点甜头,酒并不好喝的,大人爱喝,大概我还小,今晚在对象家和她家人喝了几杯,我酒量还好,预估是一斤白酒的感觉,不过伤身伤脑,还是少喝为妙,能偷就偷一点。 书有满满的译制腔味,脑海总是浮现出那类声音 哦我的上帝,实在是不早了,早点休息吧,明天还要上班呢! 晚安😴
搓了个工具箱+github pages
gemini3 发布几天了。都说很叼,前端很叼,画页面很牛。那就帮我画个工具箱吧 设计 于是打开 chatgpt 和他讨论一下,主要思想就是我希望前端能够非常的模块化 写一个工具的时候,不需要关注太多和我网页的配合。按照一定的规范写完工具后放在指定位置就行了。基于 git 我就可以审核后发布,前端就可以在某个目录某个地方看到这个工具,搜到这个工具。暂时不考虑性能问题 gemini3 目前我两个用的地方,一个在 ai studio 里面直接用,另一个就是在 cursor 里面用了,姑且信一把 cursor 开搓 接一杯水的功夫出来了。这个设计很符合我的概念(但是我本能的觉得性能影响很大,以后堆积越来越多的工具,一打开我的网站,啪的一下要下载好几十MB 的内容。) 编译预览一下,这期间有一点小问题,反正我也不是很懂前端,他给修好了 随后上点强度,一口气提了 9 个比较常见的网页工具,一次性完成。 可以,很满意哦,回头做个深色浅色模式随系统切换 部署 那么想把它部署起来,在这整个工具箱的设计里,是存在后端的,因为对于我的需求而言 有一些工具我是希望他有历史记录的,当然量不是很大。所以一开始我是想部署在自己的 VPS 上。但是想了一圈后犯懒了(原本想基于 github 的 webhook 或者 actions build & push docker images,服务器搞个小 deploy agent 等着更新就行)有 github pages,不如直接放在 pages 里就好了 叫 g 老师给写个 actions 关于 actions 的文档和介绍 GitHub Actions 入门教程 - 阮一峰的网络日志 GitHub Actions 文档 - GitHub 文档 因为我的仓库内有前后端的代码。所以 working-directory 指定 frontend ...
hugo 的博客点击图片放大
昨天抄来改改一篇很长的 cc 教程,里面有不少图片,发现我的主题似乎没法点击放大图片,于是求助 gemini3 实现方式 用Hugo Render Hook(渲染钩子),它接管了 Markdown 中图片语法  的渲染过程。 用 fancybox 库实现图片放大之类的 代码 layouts/_default/_markup/render-image.html 修改渲染逻辑 [html] 显示已折叠代码(40 行) 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 {{- /* 1. 解析 Markdown 里的图片路径 */ -}} {{- $u := urls.Parse .Destination -}} {{- $src := $u.String -}} {{- /* 2. 如果不是绝对路径(如 http://...),则尝试在资源中查找 */ -}} {{- if not $u.IsAbs -}} {{- $path := strings.TrimPrefix "./" $u.Path }} {{- /* 3. 尝试从“页面资源”或“全局资源”中查找该图片 */ -}} {{- with or (.PageInner.Resources.Get $path) (resources.Get $path) -}} {{- /* 4. 如果找到了,获取它在网站最终生成的正确相对链接 */ -}} {{- $src = .RelPermalink -}} {{- /* 5. 假如原链接带参数(?size=small)或锚点(#top),把它们拼回去 */ -}} {{- with $u.RawQuery -}} {{- $src = printf "%s?%s" $src . -}} {{- end -}} {{- with $u.Fragment -}} {{- $src = printf "%s#%s" $src . -}} {{- end -}} {{- end -}} {{- end -}} {{- /* 6. 构建 img 标签属性:合并默认属性和自动生成的属性 */ -}} {{- $attributes := merge .Attributes (dict "alt" .Text "src" $src "title" (.Title | transform.HTMLEscape) "loading" "lazy") -}} <div class="post-img-view"> <!-- href: 指向图片大图的链接(Fancybox 需要知道点开后显示什么) data-fancybox="gallery": 告诉 Fancybox JS 插件,这个链接要用灯箱打开,而不是跳转页面 --> <a data-fancybox="gallery" href="{{ $src }}"> <img {{- range $k, $v := $attributes -}} {{- if $v -}} {{- printf " %s=%q" $k $v | safeHTMLAttr -}} {{- end -}} {{- end -}}> </a> </div> layouts/partials/extend_head.html 引入 fancybox 资源 ...