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

javascript eval(), controlling the input & the real dangers

本文关键字:amp 危险 输入 eval 控制 javascript      更新时间:2023-09-26

简介

我目前正在做一个名为draw.js的项目。该项目背后的想法是让一个在线代码编辑器链接到绘图空间,这样你就可以使用代码进行绘图。

当我第一次发现two.js库时,我就有了这个想法。我想马上开始画画,但做不到,因为我必须先设置文件等。只需设置一次文件,然后用旁边的代码编辑器在线托管,就可以更容易地开始了。最重要的是,我可以在任何我想做的地方(学校、家里等(进行操作,而无需随身携带U盘之类的东西。

有了代码编辑器也可以更快地得到结果。所以只有大的优点。

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

我的问题

这个解决方案工作完美,而且设置起来非常容易。然而,网上研究和常识告诉我,这是一个非常不安全的解决方案。

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

现在这是像$("body").html("");这样的东西的问题,但这不是世界末日。这样编辑html功能强大,但仅限于客户端。实际上,您可以通过在chrome中打开开发工具来做到这一点。

我的问题

我自己想不出这个安全漏洞有什么严重的问题。然而,我并不是这方面的专家。这就是我问这个问题的原因。

以这种方式使用eval((是否存在真正的危险?这些危险是什么

如果有。。。

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

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

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

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

  1. 伪造代码输入,使其看起来像不是
  2. 获取您的身份验证对象并将其发布到另一台服务器
  3. 从系统中获取更多可用信息(请参阅https://github.com/Valve/fingerprintjs2)

除了这些隐私问题之外,它还可以从流氓网络加载广告,这些网络有能力在你和其他用户的系统上注入病毒。

基本上就是不信任任何用户代码。如果您想执行用户提交的代码,请小心,它只能访问有限的范围。这样的东西(沙盒(只能更改页面的特定部分。有关可用于实现此目的的库的特定示例,请参阅https://github.com/asvd/jailed.

我的建议是在RegEx中设置一个白名单模式。例如,您可能不希望使用包含特定模式的javascript命令,例如''"|''''等。白名单的列表可能比黑名单的列表短得多。