Comments (6)
待补充 AST 分析方案 @ccksfh
from mip2.
方案大体同上,但是我的想法是,如果发现全局变量不在白名单中,不中止执行 js,删除这个 expression
沙盒机制与 #5 保持一致
另外 ast 方案目前使用的是 esprima + estraverse + escodegen,打出来的包大概是目前 mip.js 的一半了。。试过 babylon + babel-traverse + babel-generator 的方案,更大,接近目前方案的两倍
有个问题是,mip-script 组件会被包在 sandbox 里,这导致我分析完之后的 script 找不到方法来执行,这个比较头疼 mip-cli 会做组件白名单,对部分组件不注入沙盒,这个问题结了
from mip2.
发现全局变量不在白名单中,应该中止执行 JS 吧?如果只是删除这个 expression 不会会导致部分代码没执行,程序不完整,会报错吗?
from mip2.
目前 mip-script 的沙盒机制跟组件保持一致
现在 @clark-t 的策略是,在白名单内不做替换,直接使用全局变量(因为是安全的,直接使用正常 window 下的变量,如 console);不在白名单内(不安全的)就替换成 MIP.sandbox 的(经过重新定义的 - 如 window/window.xxx,或没有经过定义的)。当然问题在,不在白名单内的变量替换后,如果MIP.sandbox 下没有实现,同样可能不能正常使用。某种程度上跟中止执行效果类似吧,不过中止的操作就相对更简单了。在目前的策略下,我可以在替换的同时给开发者提示,是否触发了红线
跟一开始说的 “白名单内就替换,保证使用的是沙盒里面的变量” 有些不一致
from mip2.
mip-script
的白名单应该比组件的白名单更加严格
因为组件会经过我们的人工审核,但是 HTML 并不会,所以,要以最严格的方式限制开发者编写 JS,至少从一开始要从紧到松
所以,在你们把方案完成之后,我们回过头再来仔细 review 这个开放给开发者的白名单。
from mip2.
关于 mip-script
校验,我认为意义不大,不如不做。
如上次讨论,沙盒对全局变量属性和方法检查困难,即无法检查如 window.alert()
,仅检查如 window
、BAIDU
此类全局变量,所以方案整体通过沙盒变量替换机制来保证 “安全”,在这个方案下沙盒仅能输出全局变量的检测,即出现了认为 window.alert()
是安全的,而 BAIDU
是不安全的。这种标准的不一致使校验实际上既没有起到 准入的作用,也没有起到 提示开发者规范 的作用。
另外,页面检验有前后端两部分,后端校验用于 MIP 页面准入,前端用于开发者开发过程中检查自己是否符合准入规范。基于这一设计原则,前后端校验规则需要保持一致,我对 MIP 页面校验 “前端校验可以更严格” 暂时不赞同。
建议方案:
- 关于准入,沙盒提供完整的检测机制,校验才能提供完善的准入。
- 关于开发者提示,依靠文档和页面/组件调试、运行时提供全局变量及其方法使用提示。
from mip2.
Related Issues (20)
- 沙盒开放 document.referrer 读权限
- iframe里的页面mip-fixed组件不再有固定效果(IOS环境) HOT 1
- 怎么停用已经生效的mip HOT 1
- mip-link打开iframe页面无法正确计算高度的问题(IOS12,IOS13环境)
- [sandbox] 申请 swanInvoke
- 反馈:docs/news/index.md
- 反馈:docs/components/dynamic-content/mip-form.md HOT 3
- MIP 头部 bar 固定样式会被网站自自定义样式影响
- mip-video 在安卓qq浏览器脱离文档流
- 反馈:docs/news/index.md HOT 1
- 非白名单 npm 列表 HOT 1
- 反馈:docs/components/layout/mip-tabs.md HOT 1
- 独立域名的mip站点到底如何正确退出,恢复成H5移动站 HOT 1
- 反馈:docs/components/presentation/mip-rem.md HOT 1
- vue 组件在注册的时候会执行两次
- m-bind:href 浏览器上显示 href="{"tel":""}"
- MIP Cache 服务下线,请问这个项目是不维护了吗? HOT 2
- @baidu/fc-jmy-client-capabilities包申请加白
- 官网https://www.mipengine.org/证书过期好几个月了 HOT 1
- mip2+vue怎么配置跳转?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mip2.