尘土与星辰 -1992|第249章|压测前夜|中文
硬盘读取进度条走到百分之百,发出轻微的“滴”声。十万条门诊日志以CSV格式铺满屏幕,像一片未经开垦的荒地。字段混杂,时间戳格式不一,部分敏感字段甚至带着全角空格和不可见字符。林尘没有皱眉。他拉开抽屉,拿出一罐冷掉的速溶咖啡,倒进纸杯,兑了半杯温水。苦味在舌根化
第249章 压测前夜
硬盘读取进度条走到百分之百,发出轻微的“滴”声。十万条门诊日志以CSV格式铺满屏幕,像一片未经开垦的荒地。字段混杂,时间戳格式不一,部分敏感字段甚至带着全角空格和不可见字符。林尘没有皱眉。他拉开抽屉,拿出一罐冷掉的速溶咖啡,倒进纸杯,兑了半杯温水。苦味在舌根化开,神经被强行拽回清醒状态。
“渗透测试的脚本,得重写。”他重复了一遍,手指已经落在键盘上。
苏曼没问为什么。她拉过一把椅子坐在侧面,打开自己的终端,开始梳理院方提供的脱敏规则文档。两人之间没有多余的交流,只有键盘敲击声和偶尔的鼠标点击声,在凌晨四点的办公室里切割出一种紧绷的节奏。
林尘先搭骨架。他放弃了现成的开源脱敏库,那些库对并发和内存的管理太粗糙,扛不住第三方安全公司的暴力扫描。他新建了一个Python脚本,引入multiprocessing和asyncio,把数据流拆成读写分离的管道。读取端负责解析原始日志,清洗脏数据;处理端调用国密SM4算法进行字段级加密;写入端负责将结果推送到临时数据库。每一步都加上严格的异常捕获和日志记录。他写得很慢,每敲完一个函数,都会在脑子里跑一遍边界条件:空值怎么处理?超长字符串会不会溢出?并发数突然飙升到五千,内存会不会被撑爆?
左脚的小腿肌肉又开始痉挛。他停下敲击,把脚从硬纸箱上挪下来,踩在冰凉的地砖上。痛感顺着跟腱往上爬,像一根钝针在骨缝里搅动。他深吸一口气,把重心完全移到右腿,扶着桌沿站直,慢慢活动脚踝。关节发出轻微的咔哒声。不能停。八个小时,扣除编译和测试,留给编码的时间不到六小时。他坐回椅子,把左脚重新搁回纸箱,调整代码结构。
“动态脱敏的密钥轮转逻辑有问题。”苏曼的声音从侧面传来,很轻,但切中要害,“院方的统一认证网关每十五分钟会刷新一次Token。如果我们的脚本还在用旧密钥加密,压测时会被直接判定为数据泄露。”
林尘转头看了一眼她的屏幕。她画了一张简单的时序图,标出了网关刷新和脚本加密的时间差。确实是个盲区。他调出代码,在处理端加了一个异步监听线程,专门捕获网关的Token刷新事件。一旦收到新密钥,立刻平滑切换加密实例,旧数据流用旧密钥完成收尾,新数据流无缝接入。不中断,不丢包。写完这段,他保存,运行本地单元测试。终端里滚过绿色的PASS。他揉了揉干涩的眼睛,继续往下写。
时间像被压缩的弹簧,一点点往前推。凌晨五点,读取端跑通。六点,加密逻辑对齐。七点,并发压力模拟启动。林尘把脚本的并发阈值调到三千,导入一万条测试数据。进度条开始跳动。CPU占用率平稳在65%,内存曲线缓慢爬升,但在到达阈值前被垃圾回收机制压了下去。没有崩溃,没有死锁。
他靠在椅背上,长出了一口气。后背的衬衫已经湿透,贴在皮肤上,冰凉。
“跑一遍全量。”他说。
苏曼点头,把十万条真实日志导入。进度条再次启动。这一次,屏幕上的数据流像一条暗河,无声地向前涌动。林尘盯着监控面板,心跳随着内存和CPU的波动微微起伏。他习惯性地拿起笔,在旁边的白板上记下几个关键参数:平均响应时间120ms,峰值内存占用1.8G,错误率0.01%。都在安全线内。
但现实从不按脚本运行。
进度条走到87%的时候,监控面板突然跳出一个红色警告:[WARNING] Field 'patient_id' collision detected. Hash conflict rate: 0.04%.
林尘的瞳孔微微收缩。哈希碰撞。在十万条数据里,有四十多条患者的脱敏ID生成了相同的哈希值。在医疗数据里,这意味着两个不同的病人被系统识别成了同一个人。如果压测时被发现,试点资格直接作废。
“停。”他立刻按下中断键。进度条定格。
苏曼凑过来,眉头拧紧。“是SM4的分组模式问题,还是盐值没加够?”
“盐值没问题。”林尘调出碰撞的原始数据,逐行比对。问题出在院方的历史系统上。早期录入时,部分患者的身份证号存在重复或格式错误,导致清洗前的原始数据本身就有脏点。脚本只是把脏数据原封不动地加密了。
“不能等院方改原始数据。”林尘的声音很平,但语速加快,“我们在加密前加一层预校验。对patient_id做正则清洗,剔除明显不符合规则的字符,再引入时间戳和随机数作为二次盐值,强制打散哈希分布。碰撞率必须压到0.001%以下。”
“加预校验会增加耗时。压测时间窗口只有两小时,延迟超过150ms就会被第三方标记为性能不达标。”苏曼指出风险。
“性能不达标可以优化算法。数据逻辑错误是红线。”林尘已经开始修改代码。他把预校验模块做成独立的C扩展,用ctypes调用,绕过Python的GIL锁,提升处理速度。手指在键盘上翻飞,肌肉记忆压过了疲惫。左脚已经完全失去知觉,但他感觉不到。此刻的感知只有屏幕上的字符、内存的波动和倒计时的秒针。
上午九点四十分。修改完成。全量数据重新导入。
进度条再次启动。这一次,红色警告没有再出现。监控面板上的曲线平稳得像一条直线。平均响应时间135ms,勉强卡在安全线边缘。错误率0.0008%。
林尘按下保存,合上笔记本。他靠在椅背上,闭上眼睛。窗外的天色已经泛白,灰蓝色的晨光透过玻璃照进来,落在桌面上,照亮了散落的草稿纸和空咖啡罐。办公室里很安静,只有服务器风扇低沉的嗡鸣。
“脚本打包,生成部署文档。”他睁开眼,声音沙哑,“十一点前发给信息科。让他们提前部署到测试网段。”
苏曼应了一声,开始操作。她的动作很利落,没有多余的废话。两人配合了太久,默契已经成了本能。
林尘站起来,走到窗边。左腿落地时猛地一软,他扶住窗台才稳住。膝盖骨传来一阵尖锐的刺痛,他咬紧牙关,慢慢站直。玻璃上映出他的脸,眼窝深陷,胡茬凌乱,但眼神很静。
手机震动了一下。是院信息科李主任的回复:脚本已收到。第三方安全公司的人提前到了,十点半进场。你们准备一下。
林尘盯着屏幕。十点半。比原计划早了一个半小时。
他转过身,看着正在整理文档的苏曼。“提前进场了。”
苏曼手上的动作顿了一下,随即恢复。“文档马上导完。我去机房接网线。”
“不用。”林尘走回桌前,把移动硬盘拔下来,揣进外套口袋,“渗透测试不只看脚本,还看现场响应。你留在办公室盯日志。我去机房。”
他拿起背包,把笔记本电脑塞进去。肩带勒紧的瞬间,左脚的痛感再次清晰起来。但他没有停顿,拉开门,走进走廊。
走廊里的声控灯随着他的脚步声逐层亮起。光线惨白,照在墙面的消防指示牌上。林尘走得很慢,但每一步都踩得很实。他知道,真正的考验不在代码里,而在那些带着审视目光、拿着扫描工具、随时准备按下终止键的人手里。
电梯门打开。他走进去,按下地下二层的按钮。金属门缓缓合上,映出他平静的侧脸。
口袋里的硬盘贴着大腿,冰凉,沉重。十点半。倒计时开始。
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment