在我看来,eval()同样不屑于goto.而且eval,我指的是一个用于执行字符串作为代码的函数,如PHP,Python,JavaScript等所示.是否存在使用eval()合理的情况(perl除外)?如果没有,为什么这么多语言实现它呢?
我多次使用eval红宝石的功能.但我听说有人说evals很讨厌.当被问到为什么以及如何,我永远无法得到令人信服的理由不使用它.他们真的很讨厌吗?如果是,以什么方式?评估有哪些"更安全"的选择?
如果我使用eval()评估Python字符串,并且有一个类如下:
class Foo(object):
a = 3
def bar(self, x): return x + a
Run Code Online (Sandbox Code Playgroud)
如果我不信任字符串会有什么安全风险?特别是:
eval(string, {"f": Foo()}, {})不安全的?也就是说,你可以从Foo实例到达os或sys或者不安全的东西吗?eval(string, {}, {})不安全的?也就是说,我可以完全从内置像len和list到达os或sys吗?有一些不安全的字符串,如"[0]*100000000",我不在乎,因为在最坏的情况下,他们会减慢/停止程序.我主要关心的是保护程序外部的用户数据.
显然,eval(string)在大多数情况下,没有自定义词典是不安全的.
eval()Python中有一个函数我在玩游戏时偶然发现.我不能想到需要这个功能的情况,除了可能是语法糖.谁能举个例子?
我正在尝试检查转发器中的字符串值,如果它有值,则写一个链接,但似乎无法让它工作.如果myUrl中有值,那么我想显示链接.
<%if( %> <%#Eval("myURL").ToString().Length > 0 %>
<a title="myTitle" target="_blank" href="<%# Eval("myURL") %>">my link</a>
<% } %>
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
它需要一种方法来调用函数,其名称存储在类似于eval的字符串中.你能帮我吗?
我并不是说这会是一个好主意,但我发现你可以通过eval在足够大的输入字符串上运行来崩溃Python(2.7和3.2检查):
def kill_python(N):
S = '+'.join((str(n) for n in xrange(N)))
return eval(S)
Run Code Online (Sandbox Code Playgroud)
在我的计算机上S可以很好地生成,但对于大约的值N>74900,Python将失败Segmentation fault (core dumped).解释器可以处理的字符串(或解析树)的长度是否有限制?
注意:我不需要这样做,对我来说,这是一个更深层次的问题,反映了我对盒子里面发生的事情的无知.我想理解为什么Python在这里失败,所以灾难性的(为什么不抛出异常?)
首先,我改变HyperLink.NavigateUrl了代码隐藏Page_Load().
但在我决定使用Eval()方法设计之后.
<asp:HyperLink runat="server"
NavigateUrl='<%# String.Format("~/Refuse.aspx?type={0}&id={1}", Eval("type"), Eval("id")) %>' Text="Refuse" />
Run Code Online (Sandbox Code Playgroud)
要么
<asp:HyperLink ID="urlRefuse" runat="server"
NavigateUrl='<%# String.Format("~/Refuse.aspx?type={0}&id={1}", Request["type"], Request["id"]) %>' Text="Refuse" />
Run Code Online (Sandbox Code Playgroud)
where id和type- 是来自的变量Request.
但它不起作用.仅显示原始文本"拒绝".我的错误在哪里?提前致谢.
我一直在研究JS库,并希望在Github上设置一个演示页面,例如,用户可以定义自己的回调并执行命令.
我知道" eval()是邪恶的",我可以看到eval()脚本是多么盲目导致XSS和其他安全问题.我正在尝试制定一些替代方案.
我真的很喜欢jsFiddle的互动性.我已经看了他们的来源,但希望有人可以在这里列出jsFiddle如何允许并执行用户定义的JavaScript而不会有危险.只要它不涉及第三方echo服务器,我希望我能模仿这种方法.
<% if(Eval("SaveDate") != DBNull.Value){ %>
do magic
<%} %>
Run Code Online (Sandbox Code Playgroud)
给我错误:数据绑定方法,如Eval(),XPath()和Bind()只能在数据绑定控件的上下文中使用.
我可以写:<%#Eval("SaveDate")!= DBNull.Value?做魔法但我需要在if语句中做很多html魔术.
我知道我应该添加#以便使用Eval,但不确定正确的语法.
eval ×10
asp.net ×3
python ×3
c# ×2
security ×2
.net ×1
c++ ×1
code-behind ×1
cross-domain ×1
dynamic ×1
javascript ×1
ruby ×1
user-input ×1