javascript eval(),控制输入&真正的危险

时间:2016-09-20 08:42:35

标签: javascript eval

简介

我目前正在开展名为draw.js的项目。该项目背后的想法是将一个在线代码编辑器链接到绘图空间,以便您可以使用代码进行绘制。

当我第一次发现two.js库时,我得到了这个想法。我想立即开始绘图但是因为我必须首先设置文件等。设置文件一次并使用代码编辑器在线托管它使得它更容易上手,最重要的是,我可以从我想要的任何地方(学校,家庭等)做到这一点,而无需像一把便宜的usb棒。

在那里使用代码编辑器也可以更快地获得结果。那里只有很大的优点。

我必须找到一种方法来实际运行我放入我的网络应用程序的代码编辑器部分的代码。我在网上进行了一些研究,发现最简单的解决方案是获取代码,将字符串放在变量中,然后将变量传递给java脚本中内置的eval()函数。

我的问题

此解决方案完美无瑕,设置起来非常简单。然而,在线研究以及常识告诉我,这是一个非常不安全的解决方案。

你基本上可以放入任何有效的js,它会运行。

现在这对于像$("body").html("");这样的东西来说是一个问题,但这是世界末日。像这样编辑html是强大的,但只有客户端。您可以通过在chrome中打开开发工具来实现此目的。

我的问题

我自己无法想到这个安全漏洞的任何严重问题。但是我并不是这个领域的专家。这就是我问这个问题的原因。

以这种方式使用eval()时是否有任何真正的危险?那些危险是什么?

如果有......

有没有办法解决这个安全漏洞?也许只允许访问某些库?

如果有办法解决这个问题,请告诉我我将如何修复它?

2 个答案:

答案 0 :(得分:1)

假设我是您的酷网页应用程序的超级合法用户,我自己进行了身份验证,并编写了一个很酷的脚本(作为应用程序的开发人员)想要运行。当然,作为一个超级用户,你作为一个简单的用户可以比我做得更多。我嫉妒你的权利。

编写一个执行时的脚本应该不会太难:

  1. 伪造代码输入看起来不像它。
  2. 获取您的身份验证对象并将其发布到其他服务器
  3. 从您的系统中获取更多可用信息(请参阅https://github.com/Valve/fingerprintjs2
  4. 除了这些隐私问题,它还可以从恶意网络加载广告,这些网络有能力在您和其他用户的系统上注入病毒。

    基本上只是不信任任何用户代码。如果要执行用户提交的代码,请注意它只能访问有限的范围。这样的东西(沙箱)只能改变你网页的特定部分。有关可用于实现此目的的库的特定示例,请参阅https://github.com/asvd/jailed

答案 1 :(得分:0)

我的建议是在RegEx中设置白名单模式。 例如,您可能不希望允许包含某些模式的javascript命令,例如\“”|''\等等。白名单列表可能比黑名单列表短得多。