-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
mip-script 标签实现方案 #6
Comments
|
方案大体同上,但是我的想法是,如果发现全局变量不在白名单中,不中止执行 js,删除这个 expression 另外 ast 方案目前使用的是 esprima + estraverse + escodegen,打出来的包大概是目前 mip.js 的一半了。。试过 babylon + babel-traverse + babel-generator 的方案,更大,接近目前方案的两倍
|
发现全局变量不在白名单中,应该中止执行 JS 吧?如果只是删除这个 expression 不会会导致部分代码没执行,程序不完整,会报错吗? |
目前 mip-script 的沙盒机制跟组件保持一致 现在 @clark-t 的策略是,在白名单内不做替换,直接使用全局变量(因为是安全的,直接使用正常 window 下的变量,如 console);不在白名单内(不安全的)就替换成 MIP.sandbox 的(经过重新定义的 - 如 window/window.xxx,或没有经过定义的)。当然问题在,不在白名单内的变量替换后,如果MIP.sandbox 下没有实现,同样可能不能正常使用。某种程度上跟中止执行效果类似吧,不过中止的操作就相对更简单了。在目前的策略下,我可以在替换的同时给开发者提示,是否触发了红线 跟一开始说的 “白名单内就替换,保证使用的是沙盒里面的变量” 有些不一致 |
因为组件会经过我们的人工审核,但是 HTML 并不会,所以,要以最严格的方式限制开发者编写 JS,至少从一开始要从紧到松 所以,在你们把方案完成之后,我们回过头再来仔细 review 这个开放给开发者的白名单。 |
关于 如上次讨论,沙盒对全局变量属性和方法检查困难,即无法检查如 另外,页面检验有前后端两部分,后端校验用于 MIP 页面准入,前端用于开发者开发过程中检查自己是否符合准入规范。基于这一设计原则,前后端校验规则需要保持一致,我对 MIP 页面校验 “前端校验可以更严格” 暂时不赞同。 建议方案:
|
在这次方案重新设计之前,
mip-script
方案是由组件核心来实现的,开发者在页面里编写如下代码就可直接运行,方案和组件的沙盒方案一样,采用的黑盒方案,可以看这个 issue 的第一段 #5同样,会有黑名单频繁需要更新,且无法达到足够安全的程度,因此,mip-script 方案也需要重新设计。
和 #5 一样,也采用白盒方案
mip-script
自定义标签mip-script
标签内置白名单列表mip-script
分析自定义 js 的语法树,找到使用的全局变量MIP.sandbox.
前缀,保证这些变量使用的是沙盒中的变量The text was updated successfully, but these errors were encountered: