我正在建立一个网站,我需要用户应该能够根据数据库表中的值来评估某些表达式,而不是使用pyparsing等工具,而是考虑使用python本身,并提出了一个解决方案这足以满足我的目的。我基本上是使用eval来评估表达式,并以空传递全局变量dict,__builtins__
这样就无法访问任何内容,而从数据库获取值的局部变量dict
,如果用户需要一些函数,我也可以传递这些函数
import datetime
def today():
return datetime.datetime.now()
expression = """ first_name.lower() == "anurag" and today().year == 2010 """
print eval(expression, {'__builtins__':{}}, {'first_name':'Anurag', 'today':today})
所以我的问题是,它将有多安全,我有三个条件
编辑 :IMO这不是Q:661084的重复项,因为它从此结束开始,我想知道即使__builtins__
被阻止,用户也可以做坏事吗?
这是完全不安全的使用eval
,甚至内置插件清空受阻-
攻击者可以用文字开始,得到它__class__
,等,等,最多object
,它的__subclasses__
,等等…基本上,Python的自省是太强烈抵抗熟练,坚定的攻击者。
ast.literal_eval
是 安全的,如果您可以忍受其局限性…
本文向大家介绍Python用eval评估表达式,包括了Python用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例
本文向大家介绍Python使用自定义全局变量使用eval评估表达式,包括了Python使用自定义全局变量使用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例 此外,此代码不能偶然引用外部定义的名称: defaultdict例如,使用可以将未定义的变量设置为零:
问题内容: 我需要在Javascript中评估用户输入的算术表达式,例如“ 2 *(3 + 4)”,但出于安全原因,我不想使用它。 我可以去除所有不是数字或运算符的字符,但是我不确定这是否安全,如果用户可以使用,,等功能,那会很好。 是否有进行算术表达式评估的Javascript库? 问题答案: 您可以尝试使用JavaScript Expression Evaluator: 该库是Raphael
问题内容: 给定两个数据框 我想使用对一列或多列进行算术运算pd.eval。具体来说,我想移植以下代码: …使用进行编码eval。使用的原因eval是我想自动执行许多工作流程,因此动态创建它们对我很有用。 我试图更好地理解和参数,以确定如何最好地解决我的问题。我已经浏览了文档,但是对我而言,区别并不明显。 应该使用什么参数来确保我的代码以最高性能工作? 有没有一种方法可以将表达式的结果赋值给df2
我理解经典例子的问题 但我无法说服自己以下是有效的还是无效的 我知道'foo(i)'和'i'的求值顺序是不确定的,但是'评估'到底是什么意思?也就是说bar的第二个参数总是42,或者'i'的当前值可以在foo改变它之前被传入吗?
问题内容: 我正在寻找简单条件表达式的评估器。表达式应包含变量(只读),字符串,数字和一些基本运算符。 例如,这样的表达式: 到目前为止,我实现了一个相当“神奇”的解析器,该解析器返回可以评估的AST,但我不敢相信我是解决该问题的第一个。 我可以使用哪些现有代码代替? 问题答案: SPEL(Spring Expression Lang)怎么样?http://static.springsource.