laper script doctor通过对比改稿前后js在dom操作、事件绑定等高危路径的行为差异检测新漏洞,不执行代码但能识别hash→innerhtml、onerror拼接、postmessage未校验origin等典型风险。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

用Laper Script Doctor检查改稿是否引入新漏洞,核心是对比修改前后JS代码在DOM操作、事件绑定、动态执行等高危路径上的行为差异,而非仅扫描语法错误;它不运行代码,但能识别出location.hash.slice(1)后直接赋值给innerHTML、onerror属性拼接用户输入、postMessage接收端未校验origin等典型危险模式。
确认Laper Script Doctor已加载目标页面JS上下文
打开浏览器开发者工具→Console面板,输入LaperScriptDoctor并回车;若返回undefined,说明未注入成功,需重新执行注入脚本或确认页面未启用CSP阻止内联JS执行。
在Sources面板中定位到被修改的JS文件,右键→“Add script to watch list”,确保Laper Script Doctor能实时捕获该文件的AST变更。
运行DOM污染路径深度扫描
在Console中执行:LaperScriptDoctor.scanDOMPollution({includeHash: true, includeReferrer: true, includePostMessage: true})。
这一步会自动遍历所有可能被用户控制的输入源:location.hash、document.referrer、event.data、URLSearchParams等,并追踪它们是否流入innerHTML、eval、setTimeout、document.write、insertAdjacentHTML等危险API。如果改稿中新增了el.innerHTML = location.hash.slice(1),该调用会被标记为【高危路径:hash → innerHTML】并高亮显示行号。
注意:若扫描结果为空,不代表安全——可能因代码被混淆或动态构造而逃逸检测,必须人工核对关键分支。
比对修改前后的危险函数调用差异
第一步:在修改前,执行LaperScriptDoctor.exportCallGraph(),保存返回的JSON对象到本地,记为baseline.json。
第二步:完成改稿并刷新页面后,再次执行LaperScriptDoctor.exportCallGraph(),保存为after.json。
第三步:用命令行比对:diff baseline.json after.json | grep -E "(innerHTML|eval|postMessage|on\w+)"。
只要输出中出现新增的innerHTML或onerror调用行,就说明改稿引入了新的XSS风险点;尤其警惕新增的iframe.contentWindow.eval()或parent.postMessage(..., '*')——【后者等同于向任意源开放脚本执行权限】。
验证postMessage接收逻辑是否放宽校验
方法一:检查源码中所有window.addEventListener('message', ...)回调函数,确认是否仍包含严格的if (event.origin === 'https://trusted.com')判断;若被改成event.origin.includes('trusted.com')或event.origin.indexOf('trusted.com') !== -1,则存在【子域名劫持漏洞,如evil-trusted.com可绕过】。
方法二:在Console中执行LaperScriptDoctor.inspectPostMessageHandlers(),它会列出所有注册的message监听器及其origin校验逻辑的抽象表达式;若输出中出现contains或indexOf字样,立即人工复核。
这一步操作起来很简单,直接把返回结果复制进编辑器搜索关键词就行。
测试动态生成的HTML片段是否遗漏转义
在改稿涉及的JS模块中,查找所有类似element.innerHTML = \`<div>${userInput}</div>\`或el.insertAdjacentHTML('beforeend', '<span>' + data.name + '</span>')的模板拼接语句。
对每个疑似点,在Console中手动构造payload测试:LaperScriptDoctor.testHTMLInjection('userInput', '<img src="https://img.php.cn/?x-oss-process=image/resize,p_40" alt="Laper Script Doctor怎么检查改稿是否引入新的漏洞">');若弹窗触发,证明该处未做HTML实体编码,且改稿未修复该问题。
特别注意:若改稿将textContent误改为innerHTML,哪怕只改了一处,也会让整个模块从免疫XSS变为高危——这是最常被忽略的“微小改动引发严重后果”场景。











