Eval Python является встроенной функцией, роль этой функции возвращать результат выражения строки, переданная. Представьте себе, назначение переменного, выражение справа от знака равенства, записанного в строке формата, строка в качестве аргумента Eval, Eval возвращаемого значения является результатом этого выражения.
Использование в функции питона Eval является очень гибким, но и очень опасно, безопасностью является самым большим недостатком. Эта статья как от гибкости и риски внедрения Eval.
1, мощность
Несколько примеров чувствуют себя трансформировали список строк, кортеж, ДИКТ-х.
Мощный бар, чтобы строки в Eval, Eval выражения дают вам возвращаемое значение.
Eval Синтаксис выглядит следующим образом:
выражение: String
глобал: переменная сфера, глобальное пространство имен, если это предусмотрено, должны быть объектом словаря.
Местные жители: переменная сфера, локальное пространство имени, если это предусмотрено, может быть любым объектом карты.
В сочетании с глобалов и местные жители смотрят на несколько примеров
Глобал переданного значения параметра { «возраст»: 1822},
выход
В сочетании с переменными местными жителями
Две приведенных выше примеров можно увидеть, что когда параметр пустого местные, параметр Глобал не является пустым, чтобы найти, есть ли переменные Глобал параметров и рассчитываются.
Когда эти два параметра не являются пустыми, выглядят местным жителям первый параметр, а затем найти глобалов параметров, параметр местных жителей с тем же именем будет перезаписывать переменные GLOBALS в переменной.
2. Опасность
Eval удобно, но имейте в виду, что безопасность может быть преобразовано в выражение строки и исполнения, вы можете использовать для выполнения системных команд для удаления файлов и других операций.
Предположим, что злонамеренный ввод данных пользователем. Например:
Eval ( "__ импорта __ ( 'ОС'). Система ( 'Ls /home/pythontab.com/www/')")
Таким образом, после Eval (), вы увидите, что текущие файлы папки теперь перед выставочным пользователем. На самом деле, это предложение эквивалентно об осуществлении
os.system ( 'Ls /home/pythontab.com/www/')
Затем продолжайте печатать:
Eval ( "__ импорта __ ( 'ОС'). Система ( 'кошка /home/pythontab.com/www/test.sql')")
Афиши кода.
Снова команда удаления, файл исчез. такие как
Eval ( "__ импорта __ ( 'ОС'). Система ( 'гт /home/pythontab.com/www/test.data')")
Так что используйте Eval, с одной стороны, чтобы наслаждаться его гибкостью, мы должны также обратить внимание на безопасность.