先给结论:不要先删脚本,也不要先给它放权。把页面上每个外部脚本按“来源域名、加载位置、能读什么、能写什么、能否跨站发送”五项记录,再对照浏览器实际发出的请求做一次核对,才能形成可执行的权限清单。个别样本里脚本看似无害,规模化后往往因为第三方域名变更、同一脚本在不同页面承担不同职责而出现例外,所以清单必须按页面类型分开,不能直接照搬。
打开你手里那个待查页面,同时保留浏览器开发者工具的 Network 面板记录,刷新一次,导出或抄下所有非本站域名请求。外部脚本的用途不明,通常不是脚本本身加密,而是你只看到 <script src="..."> 却不知道它后续还会发起哪些请求。把初始脚本地址和它触发的后续请求放在同一条记录里,才能判断权限边界。
记录时至少写清:脚本所在域名、是否在首屏渲染前加载、是否带 async 或 defer、是否读取表单字段、是否写入 DOM、是否向第三方域名发送数据。这五项里,前两项决定它影响什么,后三项决定它需要核对什么权限。
在开发者工具里对该脚本的域名做请求过滤,观察提交表单、点击按钮、滚动页面时是否出现新的第三方请求。如果脚本只在页面加载时执行一次,且后续没有携带表单内容外发,它的权限需求通常集中在读取页面结构和写入展示层;如果每次输入都触发请求,就要把输入字段列入核对范围。
检查页面中站内链接的 href 是否在脚本执行后被替换,以及点击后是否先经过第三方域名再回到目标地址。这类行为直接影响用户去向,属于必须核对的高权限项。个别页面上可能只对某个按钮生效,规模化后却可能覆盖全部外链,因此不能只测一个入口。
同一个外部脚本在首页、文章页、表单页上的行为可能不同。把页面按模板分类,每类至少取一个样本重复上述记录。若某类页面出现额外请求或额外 DOM 改写,就在清单里单独标注,不并入通用权限。
清单不需要复杂,但每个字段都要能对应一个动作和一次复查:
填完这四个字段后,对每个脚本给出一个动作:保留、限权、替换或移除。限权指在不影响页面核心功能的前提下,缩小它能接触的字段或延后加载;替换指用本站可维护的实现替代用途不明的外部依赖;移除只适用于确认无业务依赖且无其他脚本引用的情况。
假设某文章页加载了一个外部脚本,记录显示它只读取标题和正文长度,并向一个第三方域名发送一次请求,不接触评论表单。按清单它属于低风险读取,可以先保留,但把加载位置从首屏前移到正文渲染后。调整后再次刷新并导出请求记录:如果第三方请求次数和携带字段没有增加,说明限权动作没有破坏原有用途,下一步可以只保留监控;如果出现新的请求或表单字段被读取,说明该脚本在不同条件下行为不一致,应升级为限权或替换,而不是继续保留。
这个例子的数字和域名都是假设,只用来演示判断顺序:先固定记录,再对照字段,最后用一次实际调整验证行为是否变化。任何一步出现新请求,都不能只凭“页面看起来正常”就判定安全。
个别样本成立不代表全站成立。以下情况会让同一份清单失效:第三方脚本按地区或登录状态返回不同代码;同一脚本在模板间被不同参数调用;页面改版后脚本位置变化但清单未更新;第三方域名本身发生跳转或合并。遇到这些情况,应把清单按页面模板和访问条件拆分,而不是复制同一份权限结论。
另外,请求量下降或某个域名不再出现,不能单独证明脚本已无害。它可能是缓存命中、脚本被其他资源合并、加载时机改变,或页面本身没有触发对应功能。需要结合页面行为、表单提交和链接改写一起核对,才能决定是否调整权限。
最后,权限清单是复查工具,不是一次性授权。每次外部脚本来源、页面模板或业务表单发生变化,都应重新跑一遍请求记录,把新增或消失的字段写回清单,再决定保留、限权、替换还是移除。