这确实是危险的,最安全的选择是ast.literal_eval
(请参阅标准库中的ast模块)。当然,您可以构建和更改一个ast
,以便在评估结果AST之前(当其取决于文字时)提供变量评估等。
start的可能利用是eval
从它可以动手的任何对象开始(True
在这里说),然后通过.__ class_转到其类型对象,依此类推,直到object
,然后获取其子类…基本上它可以到达任何对象类型并破坏破坏。我可以更具体一些,但我不希望在公共论坛上使用(该漏洞众所周知,但是考虑到仍然有很多人忽略它,将其透露给脚本小子可能会使情况变得更糟…只是避免eval
未经消毒的情况而已)用户输入并从此过上幸福的生活!-)。