@AveWycc

Будет ли подобное использование eval безопасным?

У меня есть реализация Set отдельным модулем set.py и в нем есть преобразование введенного в консоли значения, преобразование на тот тип, который я ввел первоначально.
Сама проверка:
def _conversion(self, val):
        """ Convert value in needed type """
        try:
            return eval(self.__set_type)(val)
        except ValueError:
            print("ValueError: Wrong input")
            return None

Если я в самом начале в main.py при помощи if ограничу ввод набором из 'int' 'float' и т.д., то можно ли считать eval теперь безопасным?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
такой eval нельзя использовать лишь потому, что это небезопасно. Фактически, если использование eval не усугубит ситуацию, то почему бы не использовать.
Довольно сумасшедшая идея ходить с открытой раной по улице. Но в защищенной среде в больнице между перевязками - это штатная ситуация, хотя и не отменяет необходимости быть осторожным.

Оголённые провода в жилом помещении - это недопустимо, но в фазные шины с правильной маркировкой в электрощитовой, наверно, допустимы.
Это касается не только eval.
Однажды я слышал от студента примерно следующие рассуждения, когда ему требовалось написать простейший калькулятор:
eval использовать нельзя (небезопасно), поэтому я пользовательский ввод записываю в питоновский файл и этот файл импортирую как модуль...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
Используйте безопасный eval:
from ast import literal_eval as eval
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы