Подтвердить что ты не робот

Python 3, Есть ли какие-либо известные дыры безопасности в ast.literal_eval (node_or_string)?

Существуют ли какие-либо известные способы оценки ast.literal_eval (node_or_string), чтобы на самом деле не быть безопасным?

Если да, доступны ли патчи для них?

(Я уже знаю о PyPy [песочнице], которая предположительно более безопасна, но если ответы не да, то нет, мои потребности достаточно незначительны, чтобы я не зашел так далеко.)

4b9b3361

Ответ 1

Документация утверждает, что она безопасна, и нет ошибки относительно безопасности literal_eval в Отслеживание ошибок, так что вы можете предположить, что это безопасно.

Кроме того, в соответствии с источником, literal_eval анализирует строку в python AST (исходное дерево) и возвращает только в том случае, если она является литералом, Код никогда не выполняется, только разобран, поэтому нет причин для риска безопасности.

Ответ 2

>>> code = '()' * 1000000
>>> ast.literal_eval(code)
[1]    3061 segmentation fault (core dumped)  python2

или, возможно, меньший сбой с SIGSEGV в Python 2. Это может быть использовано в некоторых условиях.