python中的这个eval()安全吗?

时间:2015-06-01 14:49:33

标签: python eval code-injection

考虑这段代码:

var_dump(get_headers('http://www.zakon.hr/z/199/Zakon-o-elektroničkoj-trgovini'));

array(4) {
  [0]=>
  string(24) "HTTP/1.0 400 Bad request"
  [1]=>
  string(23) "Cache-Control: no-cache"
  [2]=>
  string(17) "Connection: close"
  [3]=>
  string(23) "Content-Type: text/html"
}

这段代码中是否有代码注入? 你可以为这段代码注入提供POC吗?

1 个答案:

答案 0 :(得分:6)

由于传递给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)