标签: eval

如何在Ruby中拯救eval?

我正在试图找出如何解决eval()在Ruby 1.8.6中使用代码时出现的语法错误.

我希望以下Ruby代码:

#!/usr/bin/ruby

good_str = "(1+1)"
bad_str = "(1+1"    # syntax error: missing closing paren

begin
    puts eval(good_str)
    puts eval(bad_str)
rescue => exc
    puts "RESCUED!"
end
Run Code Online (Sandbox Code Playgroud)

运行时产生以下结果:

2
RESCUED!
Run Code Online (Sandbox Code Playgroud)

相反,我得到的是:

2
eval_rescue.rb:8: (eval):1: compile error (SyntaxError)
(eval):1: syntax error, unexpected $end, expecting ')'
Run Code Online (Sandbox Code Playgroud)

似乎eval方法引发的SyntaxError正在eval中的某个地方被拯救,而我没有机会自己处理它.

任何人都知道如何获得我想要的行为(即,我的'rescue'条款从'eval'中捕获错误)?

ruby eval exception rescue

39
推荐指数
2
解决办法
2万
查看次数

Python:使eval安全

我想要一种简单的方法在Python中执行"计算器API".

现在,我并不关心计算器将支持的确切功能集.

我希望它接收一个字符串,"1+1"并在我们的例子中返回一个包含结果的字符串"2".

有没有办法让eval这种东西安全?

首先,我会这样做

env = {}
env["locals"]   = None
env["globals"]  = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None

eval(users_str, env)
Run Code Online (Sandbox Code Playgroud)

这样调用者就不会搞乱我的局部变量(或看到它们).

但我相信我在这里监督很多.

eval安全问题是否可以解决,或者是否存在太多微小的细节以使其正常工作?

python eval

39
推荐指数
2
解决办法
3万
查看次数

eval javascript,检查语法错误

我想知道是否有可能通过javascript找到如果调用eval()有语法错误或未定义的变量等等...所以让我说我使用eval一些任意的javascript有没有办法捕获错误输出那个评价?

javascript eval

39
推荐指数
2
解决办法
4万
查看次数

如何评估在PHP中作为字符串传递的公式?

只是试图找出执行数学运算的正确和更安全的方式作为字符串传递.在我的场景中,它是从图像EXIF数据中获取的值.

经过一些研究,我发现了两种方法.

首先,使用eval:

function calculator1($str){
    eval("\$str = $str;");
    return $str;
}
Run Code Online (Sandbox Code Playgroud)

第二,使用create_function:

function calculator2($str){
    $fn = create_function("", "return ({$str});" );
    return $fn();
};
Run Code Online (Sandbox Code Playgroud)

这两个示例都需要清理字符串以避免恶意代码执行.有没有其他或更短的方式这样做?

php string math parsing eval

37
推荐指数
1
解决办法
3万
查看次数

<%#Eval("State")%>或<%#DataBinder.Eval(Container.DataItem,"state")%>

有什么区别

<%# Eval("State") %>
Run Code Online (Sandbox Code Playgroud)

在你的aspx页面,而不是

<%# DataBinder.Eval(Container.DataItem, "State") %>
Run Code Online (Sandbox Code Playgroud)

在你的aspx页面?

asp.net data-binding eval

35
推荐指数
3
解决办法
3万
查看次数

Python eval:如果我禁用内置和属性访问,它仍然很危险吗?

我们都知道这eval很危险,即使你隐藏了危险的函数,因为你可以使用Python的内省功能深入挖掘并重新提取它们.例如,即使您删除__builtins__,也可以使用它来检索它们

[c for c in ().__class__.__base__.__subclasses__()  
 if c.__name__ == 'catch_warnings'][0]()._module.__builtins__
Run Code Online (Sandbox Code Playgroud)

但是,我见过的每个例子都使用属性访问.如果我禁用所有内置函数禁用属性访问(通过使用Python令牌化程序对输入进行标记,并在具有属性访问令牌时拒绝它),该怎么办?

在你问之前,不,对于我的用例,我不需要其中任何一个,所以它不会太瘫痪.

我想要做的是让SymPy的同情功能更安全.目前,它对输入进行了标记,对其进行了一些转换,并在命名空间中对其进行了演绎.但它不安全,因为它允许属性访问(即使它真的不需要它).

python eval python-internals

35
推荐指数
5
解决办法
4898
查看次数

为什么JavaScript的eval需要括号来评估JSON数据?

我已经学会了(艰难的)我需要在JSON数据周围添加括号,如下所示:

stuff = eval('(' + data_from_the_wire + ')');
// where data_from_the_wire was, for example {"text": "hello"}
Run Code Online (Sandbox Code Playgroud)

(至少在Firefox 3中).

这背后的原因是什么?我讨厌编写代码而不理解引擎盖后面的内容.

javascript json eval

34
推荐指数
4
解决办法
1万
查看次数

数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用

我收到以下错误

数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用.

但我想要做的就是在ASP.NET REPEATER控件中

<% if ( Eval("Message").ToString() == HttpContext.Current.Profile.UserName) %>
<% { %>

           <asp:ImageButton runat="server" etc.... />
<% } %>
Run Code Online (Sandbox Code Playgroud)

asp.net repeater eval

34
推荐指数
2
解决办法
8万
查看次数

bash中的间接变量赋值

似乎在bash中建议的间接变量设置方法是使用eval:

var=x; val=foo
eval $var=$val
echo $x  # --> foo
Run Code Online (Sandbox Code Playgroud)

问题是通常的问题eval:

var=x; val=1$'\n'pwd
eval $var=$val  # bad output here
Run Code Online (Sandbox Code Playgroud)

(并且因为在很多地方推荐,我想知道有多少脚本因此而易受攻击...)

在任何情况下,使用(转义)引号的明显解决方案并不真正起作用:

var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\"  # fail with the above
Run Code Online (Sandbox Code Playgroud)

问题是bash有(with ${!foo})烘焙的间接变量引用,但是我没有看到任何这种方式来做间接赋值 - 有没有理智的方法来做到这一点?

为了记录,我找到了解决方案,但这不是我认为"理智"的东西......:

eval "$var='"${val//\'/\'\"\'\"\'}"'"
Run Code Online (Sandbox Code Playgroud)

bash quotes eval variable-assignment

34
推荐指数
5
解决办法
3万
查看次数

为什么eval()存在?

许多程序员说使用该功能是一种不好的做法eval():

什么时候JavaScript的eval()不是邪恶的?

我想花一点时间来解决你的问题的前提 - eval()是"邪恶的"......

这个eval()有危险吗?

Buggy evaled代码可能违反安全属性,就像有缺陷的源代码一样容易...

为什么不用eval()JSON?

您的安全性可能有多种方式可能会受到影响......

是否有充分的理由使用eval()?

是的 - 当没有其他方法以合理的清晰度完成给定任务时...这消除了99%使用eval的情况......

为什么eval中的eval不安全?

eval的危险只会在你为一个用户bob写的脚本服务bob的浏览器eval时提供它丑陋的头部...


那为什么它首先存在?

javascript eval

32
推荐指数
4
解决办法
1404
查看次数