如何通过Fiddler自动响应器绕过子资源完整性检查替换JS文件
解决Fiddler替换JS文件时的子资源完整性(SRI)拦截问题
当你用Fiddler替换目标站点的JS文件时,浏览器会通过子资源完整性(SRI)校验对比哈希值,导致修改后的JS被拦截。以下是具体解决步骤:
一、配置自动响应器替换目标JS文件
- 准备好你修改后的JS文件(比如命名为
custom-modules.js),存放在本地路径(如C:\FiddlerScripts\custom-modules.js)。 - 打开Fiddler,切换到Autoresponder标签页:
- 勾选「Enable rules」和「Unmatched requests passthrough」。
- 点击「Add Rule」,在「Match Condition」栏输入目标JS的匹配规则,比如:
(如果知道完整URL,直接填完整URL更精准)regex:https://a.gamelet.online/gassets/resource/.+/modules.js - 在「Action」下拉框选择「Find a file...」,选中你本地的
custom-modules.js。 - 点击「Save」保存规则。
二、修改页面的SRI校验属性(二选一)
浏览器会读取页面中JS标签的integrity属性做校验,你需要修改这个属性或者直接移除它:
方法1:替换为修改后JS的哈希值
- 直接使用报错信息里浏览器计算出的修改后JS的SHA-256哈希(格式为
sha256-xxxxxx)。 - 打开Fiddler的规则编辑器:点击Rules -> Customize Rules...(或按Ctrl+R)。
- 在
OnBeforeResponse函数中添加以下代码:if (oSession.HostnameIs("twrolecgeditor.gamelet.online") && oSession.ResponseHeaders.ExistsAndContains("Content-Type", "text/html")) { var body = oSession.GetResponseBodyAsString(); // 替换为你修改后JS的哈希值 var newIntegrity = "sha256-9AoQiDzp9rKuhtfbTQtj1N4Rh7kqUtxfLdrVOuef7dw="; body = body.Replace(/sha256-[a-zA-Z0-9+/=]+(?=["'])/, newIntegrity); oSession.utilSetResponseBody(body); } - 保存脚本,重启Fiddler生效。
方法2:直接移除页面的SRI校验属性
如果不想计算哈希,直接移除页面中JS标签的integrity属性即可:
在OnBeforeResponse函数中替换为以下代码:
if (oSession.HostnameIs("twrolecgeditor.gamelet.online") && oSession.ResponseHeaders.ExistsAndContains("Content-Type", "text/html")) { var body = oSession.GetResponseBodyAsString(); // 移除所有sha256类型的integrity属性 body = body.Replace(/integrity="sha256-[a-zA-Z0-9+/=]+" /g, ""); oSession.utilSetResponseBody(body); }
完成以上配置后,刷新目标站点,修改后的JS就能正常加载,不会被SRI拦截了。
内容的提问来源于stack exchange,提问作者pufferifhsMaster
相关产品推荐
相关产品推荐

