先给结论:外部脚本用途不明时,不要先删也不要先放行,而应先冻结它的执行权限,再按“它可能触碰了哪些资源”整理出一份待核对清单。清单的核心不是脚本本身,而是它请求的权限与页面真实需要之间的差额。当差额集中在读取类权限时,通常可以保留观察;当差额涉及写入、外发或身份类权限时,应优先切断并核对来源。下面按两种前提分别说明。
如果外部脚本还能被暂停或延迟加载,最有效的动作是把它从关键路径移开,记录暂停前后的页面行为差异。这一步的目的不是判断脚本好坏,而是确认它是否承担了页面正常功能。
整理清单时,按权限类型分四组记录,每组写清“页面是否真的需要”和“证据在哪”:
完成清单后做一次对照:把脚本声明的用途与它实际请求的权限逐条比对。若两者基本吻合,保留并继续观察;若读取、外发、身份类权限明显超出声明用途,就进入下一种处理方式。这个对照动作会直接决定下一步是“继续观察”还是“切断并追溯来源”。
当外部脚本已经嵌入关键流程、暂停会直接影响下单、登录或内容展示时,处理顺序要反过来:先限制影响面,再补核对。此时不适合整体停用,而应按权限的危险程度分级。
这样做的理由是:无法暂停时,整体停用带来的业务中断可能比脚本本身的风险更直接。分级限制能在不破坏主流程的前提下,把最敏感的权限先收回来。若限制后页面功能正常,说明该权限并非必需,可以进入永久移除评估;若限制后功能异常,则说明该脚本确实承担了某项职责,需要找到替代实现再决定去留。
权限清单容易停留在“它请求了什么”,但真正决定处置的是“它为什么请求”。以下现象可以帮助区分原因,但要注意每种现象都有其他合理解释,不能单独作为结论。
判断时至少找两条相互独立的证据,例如“请求目标地址”加“读取的字段范围”,再结合页面是否真的需要该功能。只有一条证据时,先记录,不急于下结论。
假设某页面加载了一个外部脚本,声明用途是“页面交互增强”,但核对发现它能读取全部表单字段,并向一个未在声明中出现的地址发送请求。此时按清单判断:读取类与外发类权限均超出声明用途,属于高风险差额。
实施动作:先阻止该地址的外发请求,保留脚本其余部分。结果若页面交互仍正常,说明外发并非必需,可继续评估移除;结果若交互失效,说明脚本确实承担了某项功能,需要先找到可替代的实现,再决定是否保留。这个例子的关键不是脚本本身,而是“限制一项权限后观察功能是否受影响”这个动作,它把模糊的用途问题转成了可验证的取舍。
有些权限差额是合理的,不能一律按风险处理。例如页面本身就需要把用户输入提交到指定服务,此时外发类权限属于必要;再如脚本需要根据登录态展示不同内容,读取身份信息也可能是设计的一部分。判断例外时,看三点:权限是否与页面核心功能直接相关、是否有明确的声明来源、是否能在不扩大权限的前提下实现同样效果。三点都满足时,可以保留并记录理由;缺任意一点,就回到前面的分级处置。
清单整理完成后,应把它当作持续维护的对象,而不是一次性结论:每次页面改版、脚本来源变更或权限范围调整,都重新核对一次差额,再决定是继续观察、分级限制还是替换实现。