Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript eval(),控制输入&;真正的危险 介绍_Javascript_Eval - Fatal编程技术网

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

javascript eval(),控制输入&;真正的危险 介绍,javascript,eval,Javascript,Eval,我目前正在做一个名为的项目。该项目背后的想法是将在线代码编辑器链接到绘图空间,以便您可以使用代码进行绘图 我第一次发现图书馆时就有了这个想法。我想马上开始画画,但没能,因为我必须先设置文件等。只需设置一次文件,并在其旁边的代码编辑器中将其在线托管,就可以更轻松地开始使用,此外,我还可以在任何我想要的地方(学校、家等)使用它,而无需随身携带U盘之类的东西 有了代码编辑器也可以更快地得到结果。所以只有大加分 我必须找到一种方法来实际运行我放入web应用程序代码编辑器部分的代码。我在网上做了一些研究,

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

我第一次发现图书馆时就有了这个想法。我想马上开始画画,但没能,因为我必须先设置文件等。只需设置一次文件,并在其旁边的代码编辑器中将其在线托管,就可以更轻松地开始使用,此外,我还可以在任何我想要的地方(学校、家等)使用它,而无需随身携带U盘之类的东西

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

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

我的问题 这个解决方案完美无瑕,而且非常容易设置。然而,在线研究和常识告诉我,这是一个真正不安全的解决方案

基本上,您可以输入任何有效的js,它就会运行

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

我的问题 我自己也没能想到这个安全漏洞有什么严重的问题。然而,我并不是这个领域的专家。这就是我问这个问题的原因

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

如果有的话

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


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

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

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

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

  • 伪造代码输入,使其看起来不是
  • 获取您的身份验证对象并将其发布到另一台服务器
  • 从系统中获取更多可用信息(请参阅)
  • 除了这些隐私问题之外,它还可以从流氓网络加载广告,流氓网络有能力在您和其他用户的系统上注入病毒


    基本上就是不信任任何用户代码。如果要执行用户提交的代码,请小心,它只能访问有限的范围。这样的东西(沙盒)只能改变页面的特定部分。有关可用于实现此目的的库的特定示例,请参见。

    只要您评估自己的代码,就可以了。在你的域名下评估别人的代码是一个很大的禁忌。@georg是的,这是我的想法,但我不太清楚为什么。什么内容是绝对禁止的?如果Tom正在查看您的网站,并且您允许他运行Alice的代码,那么Alice可以1)破坏您的网站,例如插入一个100%的iframe,其中包含她自己的内容,2)窃取Tom的cookie,3)代表Tom发布内容。这在Javascript中不起作用。给我你的模式,我会告诉你如何绕过它。等等,他不能在后端而不是前端进行正则表达式验证吗?那么,您将如何规避它呢?关键是,您始终可以重新表述“坏”模式,使其看起来是无辜的,例如
    document.cookie=>document['coo'+'kie']
    有趣。您将如何构造像“document.getElementsById(…)”这样的文档查询?
    self['docu'+'ment']['dIyBtnemelEteg'.split('').reverse().join('')
    ;)