浏览器扩展追踪拦截文件上传实现及跨浏览器兼容方案咨询
解答
1. 浏览器扩展方案可行性与参考实现
你的需求完全可以通过浏览器扩展实现,核心实现逻辑如下:
- 事件捕获层:通过内容脚本(content script)监听页面内
<input type="file">的change事件、拖拽上传的drop事件,提前拿到用户选择的文件对象;同时搭配扩展的webRequestAPI拦截所有携带二进制内容的上传请求,做双层兜底。 - 信息采集层:通过浏览器原生File API直接读取文件名、大小、格式三类基础元数据;对txt、doc、docx等可读格式文件,用
FileReader接口读取文件流后,搭配对应格式的解析库提取文本内容即可。 - 拦截执行层:匹配到黑名单关键词后,延迟操作可以通过hold住
webRequest的请求回调直到指定时长结束再放行;阻断操作可以直接在webRequest层返回取消请求的指令,也可以在内容脚本层拦截表单提交/上传触发事件,从页面侧直接阻断上传动作。
现有成熟的企业级浏览器端DLP(数据防泄漏)产品基本都是这套实现逻辑,开源方向可以参考广告拦截类扩展的请求拦截逻辑、文件上传校验类扩展的文件处理逻辑做二次开发。
2. 跨浏览器兼容情况
- Chromium内核浏览器(Chrome、Edge)对上述用到的所有API支持度完全一致,代码适配成本极低,95%以上的代码可以直接复用。
- Firefox对
webRequestAPI、内容脚本权限的声明规则、回调参数存在少量差异,做针对性兼容调整后也可以正常运行,不存在仅能在Chrome使用的问题。
3. Go语言实现的非扩展替代方案
最成熟的方案是本地流量代理方案:
用Go开发本地HTTP/HTTPS代理服务,配置浏览器/系统全局流量走该代理,在代理层解析所有上传请求的流量,提取上传的文件元数据和内容,匹配黑名单后执行延迟转发或者直接丢弃请求的操作。HTTPS流量可以通过在本地安装自签根证书的方式做中间人解析,该方案不需要安装任何浏览器扩展,适配所有主流浏览器,对用户侧的使用感知也更低。
另一种可选方案是用Go的文件系统监控库监听用户常用的文件存储目录,当检测到浏览器进程读取符合敏感规则的文件时直接拦截读取动作,不过该方案需要较高的系统权限,误拦截概率也更高。
内容的提问来源于stack exchange,提问作者Tank The Tears
相关产品推荐
相关产品推荐

