Ну, почти все там говорят, что eval
злой, и это верно для 99% ситуаций ... НО Я здесь, чтобы спросить о некотором фрагменте кода, который я написал, который использует eval
, SO, Is this опасно?EVAL(). Это опасно?
Я попытался дезинфицировать данные, как наиболее насколько это возможно, сохраняя при этом оригинальный Funtionality, но это делает использование eval
и что-то может пойти не так:
import os
try:
if os.environ["LANG"].rstrip('''\n''')[5:] == ".UTF-8":
Language = str(os.environ["LANG"].rstrip('''\n''').rstrip(os.environ["LANG"].rstrip('''\n''')[5:]))
eval (str("LP." + Language + "()"))
else:
raise Exception("Not an UTF-8 locale")
except KeyError:
LP.Fallback()
except AttributeError:
LP.Fallback()
Прежде всего, этот код должен работать под UNIX и производные.
Написал в python2.7.
Что это значит, это вызвать некоторые методы внутри класса LP
.
Я пытался настройки уже испортить мой компьютер пытается изменить переменную LANG
системы на любую строку, которая может нанести вред моему компьютеру, как rm -rf /
или подобия, но, потому что мой код удаляет последние 5 символов из LANG
вара & добавляет LP.
в начале и ()
в конце, это приводит к этому, не говоря уже о том, что он проверяет с начала, если последние 5 символов строки: UTF-8
, но если я удалю это условие, это должна быть «вредная» команда:
LP.rm -r()
До сих пор я отмечаю d, что любая команда длиной более 5 символов не сможет обойти строку кода «удалить последние 5 символов», и добавление LP.
& ()
должно быть достаточным для нейтрализации любой попытки причинить вред.
До сих пор, я буду держать».utf-8" , чтобы избежать критической ошибки ...
Это работало как положено. Не знал о 'endswitch' &' getattr', с ними все работает. Такой быстрый ответ, спасибо! P.S: Является ли 'eval' 100% заменяемым какой-либо другой командой? Или есть иногда, когда это единственное решение? – PythonNoob
Я уверен, что бывают случаи, когда это единственное решение, иначе оно вообще не будет на языке. Однако они должны быть довольно редкими. –
Хорошо, спасибо за всю эту информацию. – PythonNoob