游乐游手机版
首页/前端开发/文章详情

防范原型方法恶意篡改内置链绕过文件读写控制

时间:2026-06-22 10:31
必须服务端鉴权文件操作,前端拦截无效。原型污染可绕过权限判断,应冻结关键原型、内联白名单校验,并在服务端校验资源级权限与文件元数据。运行时需检测原生方法是否被篡改。
必须服务端鉴权文件操作——前端拦截无效,原型污染可绕过权限判断;应冻结关键原型、内联白名单校验,并在服务端校验资源级权限与文件元数据。

如何防范攻击者利用原型方法恶意改变内置链从而绕过文件读写控制

先别急着在前端加一堆“禁止上传”“禁用下载”的按钮——那些控件本质上只是界面层提示,规劝普通用户尚可,面对攻击者则毫无防御力。攻击者直接在浏览器控制台执行一行 fetchXMLHttpRequest,就能轻松绕开所有前端约束,根本无需触碰原型链。原型链相关的核心风险,并非直接打开文件系统权限,而是经由污染导致权限判断逻辑误判或方法失效。

真正要防的是原型污染干扰权限判断逻辑

假设前端代码里写着类似 if (user.hasFileAccess())canRead(file.type) 这样的判断,并且把它们当作是否允许发起请求的依据——那攻击者就有机可乘了。通过污染 Object.prototypeArray.prototype,能让这些函数永远返回 true

  • 污染 Object.prototype:执行 Object.prototype.hasFileAccess = () => true,所有对象都“自带权限”
  • 覆盖 Array.prototype.includes:让白名单校验如 ['pdf', 'txt'].includes(ext) 永远返回 true
  • 劫持 String.prototype.endsWith:使 filename.endsWith('.jpg') 对任意后缀都返回 true

冻结关键原型 + 隔离敏感逻辑

做法很简单:在页面加载最早期——也就是