python 中的这个 eval() 安全吗?
Is this eval() in python safe?
考虑这段代码:
from re import sub
input = request.POST['input']
sub_pattern = {'1':"sub('pattern1','txt1',input)",
'2':"sub('pattern2','txt2',input)",
}
eval(sub_pattern['1'])
这段代码中是否存在代码注入?
你能提供这个代码注入的 POC 吗?
由于传递给 eval
的字符串是常量,没有任何替换,因此此代码是安全的。然而,这也是对最佳实践的毫无意义的偏离:根本没有正当理由在这里使用 eval
。
假设您希望能够执行 re.sub()
以外的操作,一种方法是使用 lambdas:
from re import sub
input = request.POST['input']
sub_pattern = {'1': lambda input: sub('pattern1','txt1',input),
'2': lambda input: sub('pattern2','txt2',input)}
sub_pattern['1'](input)
考虑这段代码:
from re import sub
input = request.POST['input']
sub_pattern = {'1':"sub('pattern1','txt1',input)",
'2':"sub('pattern2','txt2',input)",
}
eval(sub_pattern['1'])
这段代码中是否存在代码注入? 你能提供这个代码注入的 POC 吗?
由于传递给 eval
的字符串是常量,没有任何替换,因此此代码是安全的。然而,这也是对最佳实践的毫无意义的偏离:根本没有正当理由在这里使用 eval
。
假设您希望能够执行 re.sub()
以外的操作,一种方法是使用 lambdas:
from re import sub
input = request.POST['input']
sub_pattern = {'1': lambda input: sub('pattern1','txt1',input),
'2': lambda input: sub('pattern2','txt2',input)}
sub_pattern['1'](input)