如何在执行用户输入的代码的时候,尽可能的拦截恶意代码

2020-10-28 10:39:08 +08:00
 aogu555

遇到了个蛋疼的需求,一个内部管理系统,引入了 MonacoEditor 的在线编辑器,用户可以输入代码对请求结果进行一些处理,就是将用户的代码嵌入到我的代码里执行,并且要能保存用户编写的代码,在下一次进入此页面的时候展示出来并且能重复执行。

我的想法使用 eval 去执行,但是如何在执行代码的时候尽量避免一些用户有意或无意写的恶性代码(比如操作 dom,alert,xss 攻击之类的),而且在保存代码到后台的时候需要注意哪些关键点呢,需求实在是蛋疼只能来求助各位了

2052 次点击
所在节点    程序员
13 条回复
renmu123
2020-10-28 10:41:58 +08:00
内部管理系统?有攻击了找对方领导啊(笑
tetora
2020-10-28 10:44:01 +08:00
最常见的防范是过滤尖括号和尖括号对应的各种转换
0TSH60F7J2rVkg8t
2020-10-28 10:53:27 +08:00
你这个问题,年薪价值 500w+,如果自己想面面俱到,是不可能的,而安全问题属于短板问题,有一块就能突破。所以。。。还是如 1 楼说的,找领导。
ily433664
2020-10-28 10:55:01 +08:00
内部管理系统,记录好操作人员,有问题直接去抓人
liuxingbaoyu
2020-10-28 10:55:10 +08:00
这不像是个技术问题啊...
人工审核或者谁写了恶意代码直接找他就行了
glfpes
2020-10-28 10:56:02 +08:00
对于内部管理系统这真不是个事。
写好简略的注意事项,并记录用户请求。出问题可追溯即可。
Jrue0011
2020-10-28 11:57:50 +08:00
这个好像不是 xss 那种允许用户提交 html 和 css 但拒绝 js 的场景,而是都已经允许用户编写 js 执行了
zqx
2020-10-28 11:59:33 +08:00
new Function
函数参数覆盖 window document 等 DOM 关键变量
在 iframe 沙箱中执行,异步获取执行结果
otakustay
2020-10-28 12:06:16 +08:00
上容器搞沙盒跑
boris93
2020-10-28 12:33:51 +08:00
使用前必须登录
审计用户行为
敢整活就追究责任,包括但不限于开除、赔偿、送进局子
no1xsyzy
2020-10-28 12:34:44 +08:00
你好像没说清楚一个问题,代码在前端执行还是后端执行?
前端执行不需要任何处理,所以我估摸是后端执行
那就是沙盒+备份,备份记得备份到另一台电脑上。

年薪 500w+ 有点夸张了,实际上自己写个 naive 的解释器也不需要年薪 500w+
词法和语法解析器都有现成的,拿到 AST 对照着 SICP 的那个 meta interpreter 改改就成。

找领导的前提是编写者是内部人员
然而 #3 已经说了,安全问题是短板问题,表述上有问题但我觉得意思到了
如果内部有人点了钓鱼邮件导致机器成跳板怎么办?
zqx
2020-10-28 15:01:16 +08:00
11 楼惊醒了我,如果在服务器上用无头浏览器执行代码,那在语法层面是阻止不了恶意代码的啊
abersheeran
2020-10-28 22:35:27 +08:00
内部管理系统,操作必须登录,然后这也能被攻击,就直接向上举报。你居然还想着写代码拦截,代码没有社会工程学好使。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719313

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX