Python 3, Есть ли какие-либо известные дыры безопасности в ast.literal_eval (node_or_string)?
Существуют ли какие-либо известные способы оценки ast.literal_eval (node_or_string), чтобы на самом деле не быть безопасным?
Если да, доступны ли патчи для них?
(Я уже знаю о PyPy [песочнице], которая предположительно более безопасна, но если ответы не да, то нет, мои потребности достаточно незначительны, чтобы я не зашел так далеко.)
Ответы
Ответ 1
Документация утверждает, что она безопасна, и нет ошибки относительно безопасности literal_eval в Отслеживание ошибок, так что вы можете предположить, что это безопасно.
Кроме того, в соответствии с источником, literal_eval анализирует строку в python AST (исходное дерево) и возвращает только в том случае, если она является литералом, Код никогда не выполняется, только разобран, поэтому нет причин для риска безопасности.
Ответ 2
>>> code = '()' * 1000000
>>> ast.literal_eval(code)
[1] 3061 segmentation fault (core dumped) python2
или, возможно, меньший сбой с SIGSEGV
в Python 2. Это может быть использовано в некоторых условиях.