avatar
文章
44
标签
18
分类
17
Home
归档
标签
分类
相册
关于
Logojiaklop9
搜索
Home
归档
标签
分类
相册
关于

jiaklop9

playwright补环境
发表于2026-09-18|web逆向
在浏览器自动化(如 Playwright、Selenium)的世界里,去痕(Stealth)的意思很简单:脱掉浏览器的“机器人工作服”,换上普通人的“便服”。 当你用 Playwright 打开一个网页时,浏览器其实自带了很多“我是自动化工具”的底层标记。像 Akamai 这种高级风控,一眼就能看出你是个机器人。去痕,就是把这些暴露身份的蛛丝马迹全部抹掉或伪装起来。 咱们以 Playwright 为例,通俗地聊聊它是怎么被发现的,以及怎么做去痕。 一、 浏览器自动化有哪些“原罪”?(为什么会被发现)如果不做任何处理,用代码启动的浏览器在风控系统眼里就像“裸奔”,主要漏洞有: navigator.webdriver 标志:这是最致命的一点。自动化浏览器的这个属性默认是 true,而正常人类浏览器的这个属性是 undefined 或 false。 自动化特征参数(CDP 痕迹):Chrome 浏览器暴露给开发者的 DevTools Protocol(调试协议)会在内存中留下一些全局变量或特征(例如某些特殊的属性注入)。 环境残缺:比如正常的 Chrome...
Akamai概览
发表于2026-09-18|web逆向
一、 Akamai 的原理是什么?(通俗理解)你可以把 Akamai 想象成一个极其严格的“海关安检”。当你的脚本或者浏览器访问网站时,Akamai 并不会直接放行,而是会悄悄对你进行全方位的“体检”: 环境指纹采集(搜集情报):它会用一段混淆得亲妈都不认识的 JavaScript 代码,在你的浏览器里疯狂执行。它不仅看你的 User-Agent,还会检查你的浏览器有没有被自动化工具(如 Selenium、Puppeteer、Playwright)污染,检查原型链(Prototype)、window 对象属性、WebGL 渲染指纹、Canvas 指纹,甚至是通过计时器(setTimeout)检查浏览器的执行节奏是否正常。 行为轨迹分析(看你像不像人):它会监测你鼠标怎么动、有没有点击、键盘怎么敲、页面滚动轨迹自不自然。真正的真人鼠标轨迹是带有加速度和曲线的,而脚本模拟的往往是直线或突变的。 加密签名回传(通行证):把收集到的所有环境特征和行为数据,通过一套极其复杂的算法(通常包含自定义的虚拟机 VM、动态加密逻辑、算法RPC等)打包加密,生成一个形如 _abck 或...
单一职责原则
发表于2026-07-22|设计原则
一个类(或模块、函数),应该有且仅有一个引起它变化的原因。 核心概念:什么是“单一职责”?通俗来说,一个类只用心做好一件事。打个生活中的比方: 不符合原则的设计(多功能军刀): 假设你买了一把集成了“剪刀、厨师刀、指甲刀、开瓶器、锯子”的万用军刀。某一天,如果你觉得剪刀部分太钝,想把它拆下来磨一磨,很有可能会把旁边的开瓶器弹簧弄坏,或者导致整把刀松动无法使用。 符合原则的设计(专业工具): 厨房菜刀只负责切菜,修剪指甲只用指甲刀。菜刀坏了,拿去磨或者换掉,完全不会影响你剪指甲。 在代码世界里,“引起变化的因素”通常对应着不同的角色或业务需求(比如财务部门提出了计税逻辑修改、运维部门提出了数据库结构修改)。如果把这两块逻辑塞进同一个类里,一旦财务需求发生变化,你修改代码时就有可能不小心把运维或数据库相关的功能给改出...
依赖倒转设计原则
发表于2026-07-20|设计原则
什么是依赖倒转原则(Dependency Inversion Principle, DIP)?依赖倒转原则是面向对象设计(SOLID)中的另一个核心原则。用通俗易懂的话来解释就是: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 打个比方:你想用手机听歌,你戴上了一副Type-C接口的耳机。在这个场景下: 不符合原则的设计:你的手机内部电路是针对“某一款特定型号的耳机”专门焊接死在一起的。一旦那副耳机坏了,或者你想换个蓝牙耳机,你的手机就彻底报废了,因为手机太依赖那个具体的耳机了。 符合原则的设计(依赖倒转):手机厂商和耳机厂商共同遵守一个通用接口标准(比如 Type-C 协议或蓝牙协议)。手机只需要支持这个通用协议(抽象),耳机也去实现这个通用协议(抽象)。这样,你的手机可以插任何品牌的 Type-C 耳机,甚至接 Type-C...
策略模式2
发表于2026-07-17|设计模式
今天我们来聊一个在消除复杂业务分支、提升代码可扩展性方面立竿见影的经典行为型模式——策略模式(Strategy Pattern)。 Day 4:策略模式 (Strategy Pattern)1. 它是怎么来的?在日常开发中,我们经常需要根据不同的条件执行不同的业务逻辑。比如你正在开发一个电商系统的购物车结算模块,最初只有“普通会员”不打折: 123def calculate_price(price, user_level): if user_level == "normal": return price 随着业务发展,运营同学提出了各种花式促销:黄金会员打 9 折,白金会员打 8 折,双十一满 300 减 50,618 还有限时秒杀……于是你的代码变成了这样: 123456789if user_level == "normal": return priceelif user_level == "gold": return price * 0.9elif user_level ==...
抽象工厂模式
发表于2026-07-16|设计模式
如果说昨天的工厂方法是针对单个产品(比如只生产卡车),那么今天的抽象工厂就是针对产品族(比如生产一整套豪华汽车组件,包括豪华车轮、豪华方向盘)。 Day 3:抽象工厂模式 (Abstract Factory Pattern)1. 它是怎么来的?想象一下,你正在开发一款跨平台的 UI 工具包(支持 Windows 和 Mac)。UI 组件有很多种:按钮(Button)、复选框(Checkbox)、文本框(TextField)。 如果你用昨天的工厂方法,你得写一个 ButtonFactory、一个 CheckboxFactory。但这里有一个致命的隐患:你必须确保 Windows 系统上创建的按钮和复选框都是 Windows 风格的,绝对不能在 Mac 系统里误用了一个 Windows 风格的按钮。 这就引入了“产品族”的概念。Windows 的按钮和 Windows 的复选框属于同一个产品族;Mac 的按钮和 Mac...
工厂模式
发表于2026-07-16|设计模式
今天我们来聊一个在实际开发中极度常用,能让你的代码彻底摆脱 if-elif-else 泥潭的经典创建型模式——工厂方法模式(Factory Method Pattern)。 Day 2:工厂方法模式 (Factory Method Pattern)1. 它是怎么来的?在写代码时,我们经常需要创建对象。最直接的方法就是用 new(在 Python 中是 Class())。比如你正在开发一个物流管理系统,刚开始业务简单,只有“卡车”送货,你满脑子都是: 12transport = Truck()transport.deliver() 但很快,业务扩大,客户要求增加“轮船”送货。你不得不去修改原有的代码,加上判断逻辑: 12345if mode == "road": transport = Truck()elif mode == "sea": transport = Ship()#...
单例设计模式
发表于2026-07-16|设计模式
单例模式 (Singleton Pattern)1. 它是怎么来的?在软件开发中,我们经常会遇到一些“只需要一个,多了就会乱套”的资源。比如: 电脑的回收站(你不需要两个回收站,它们会打架)。 数据库连接池(频繁创建和销毁连接非常消耗性能,保持一个全局可复用的连接池更高效)。 应用程序的全局配置(如果每个模块都自己读一份配置,万一中途改了,数据就不一致了)。在过去,程序员们通过全局变量来解决这个问题。但全局变量不仅不安全(容易被不小心覆盖),还破坏了面向对象的封装性。于是,Gang of Four(四人帮,设计模式的奠基者们)提出了单例模式:确保一个类只有一个实例,并提供一个全局访问点。 2. 适用场景 资源共享/控制:如日志记录器(Logger)、线程池、缓存。 统一配置管理:如读取 config.ini 或环境变量的类。 硬件接口访问:如打印机后台处理程序、显卡驱动接口。 3....
JS中的原型及原型链
发表于2026-06-16|前端
一、原型链提起 JavaScript 的“原型对象”(Prototype),很多刚入门的小伙伴都会觉得脑子嗡的一下。别慌,我们继续用大白话和生活中的例子来攻克它! 如果说 Property(属性) 是贴在某个具体对象上的标签,那么 Prototype(原型对象) 就是这些对象的“共享模板”或“共享仓库”。 🏭 一个大白话比喻:共享充电宝 / 乐高积木假设你和你的朋友们每人买了一台一模一样的“掌上游戏机”(对象)。 自有属性(Property): 你的游戏机贴了张贴纸,你朋友的游戏机外壳有划痕。这些属于你们各自机器的专属特征。 原型对象(Prototype): 厂家在出厂时,并没有给每台游戏机都内置1000款游戏(因为太占内存空间了)。厂家在云端放了一个“共享游戏库”,所有买这款游戏机的人,都可以通过联网直接玩里面的游戏。 这个“云端共享游戏库”,在 JavaScript 里就叫做 原型对象(Prototype)。 💻 为什么要用原型对象?(解决痛点)我们来看一个实际的代码场景。假设我们要批量制造“小兵”对象: 123456789101112function...
数据库查询优化
发表于2026-06-05|db
数据库查询优化核心思想减少与数据库的通信次数(减少往返),以及减少每次通信的数据量(瘦身) 1. 著名的 “N+1 问题” 与预加载(Relationship Loading)这是所有数据库框架中最经典的性能黑洞。 大白话场景: 你要打印 10 个班级的学生名单。 脑残做法(N+1): 你先去办公室查到了这 10 个班级(1次查询)。然后,你回班级拿第1班的名单,再去办公室;拿第2班的名单,再去办公室……为了 10 个班级,你一共跑了办公室 $10 + 1 = 11$ 次。如果有一万个班级,你的腿就废了(数据库卡死)。 聪明做法(预加载): 你在查 10 个班级的时候,直接跟办公室老师说:“把这 10 个班级里的学生名单顺便一次性都打包给我!”(只跑 1次 办公室)。 SQLAlchemy 的官方解法: 在查询时,使用 options() 明确指定加载策略。 官方提供了三种武器: 武器 A:joinedload()(连表预加载) 原理: 用 SQL 的 LEFT OUTER JOIN 把两张表拼成一张大表,一次性全拿回来。 ...
12…5
avatar
jiaklop9
白日放歌须纵酒,青春作伴好还乡
文章
44
标签
18
分类
17
Follow Me
公告
This is my Blog
最新文章
playwright补环境2026-09-18
Akamai概览2026-09-18
单一职责原则2026-07-22
依赖倒转设计原则2026-07-20
策略模式22026-07-17
分类
  • English2
  • Git1
  • UML1
  • Ubuntu1
  • bat1
  • db2
  • docker6
  • flask2
标签
Git flask web逆向 设计模式 docker bat JavaScript 设计原则 pandas Ubuntu CSS English python 科普 db hexo 脚本 UML
归档
  • 九月 2026 2
  • 七月 2026 6
  • 六月 2026 3
  • 五月 2026 7
  • 十一月 2025 2
  • 八月 2025 1
  • 七月 2025 1
  • 六月 2025 4
网站信息
文章数目 :
44
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2026 By jiaklop9
框架 Hexo 7.3.0|主题 Butterfly 5.3.3
搜索
数据加载中