Python

Почему не стоит использовать eval в написании кода?

Потому что eval подразумевает, что ты будешь пихать туда какой-то сторонний код, полученный из чёрт знает каких источников, а значит, высока вероятность, что туда что-то вредоносное подкинут
Владимир Романов
Владимир Романов
89 503
Лучший ответ
Анатолий Снигоренко А каким образом это происходит? У меня калькулятор с использованием функции eval, для проекта школьного сделан.
Медленно: перед выполнением строка компилируется в байт код виртуальной машины - уже во время работы программы.

Небезопасно: мало ли что будет введено с клавиатуры и всё это выполнится без какого-либо контроля.

Но иногда бывает полезно: когда ты точно знаешь, зачем это делаешь, и точно знаешь же, что в данном конкретном случае более удобных способов не существует.
Анатолий Снигоренко А каким образом могут что-то вредоносное внести? У меня калькулятор с использованием функции eval, для проекта школьного сделан.
Если требуется высокая скорость исполнения кода, тогда такая конструкция как eval будет существенно замедлять работу программы. Если же это обстоятельство не критично или не очень критично, тогда смело можно использовать eval, например, для ввода функций в строковом виде.
Использование этой функции может представлять большую угрозу безопасности, так как она позволяет злоумышленникам запускать произвольный код. По этой причине рекомендуется избегать использования eval() и использовать более безопасные (и быстрые!) альтернативы для общих случаев использования. Например, вместо использования eval() для динамического доступа к свойствам можно использовать скобочные обозначения.
Влад Сидоров
Влад Сидоров
25 860
Анатолий Снигоренко Ну а у меня это всё локально, разве может быть опасность?
Потому что внутри eval код основанный на известных всем программистам алгоритмах. Тру-программист и будет реализовывать этот функционал через эти алгоритмы, с внесением контроля. А примитивный текстовый ввод с eval - прямое приглашение в гости всем злоумышленникам со всех краев Земли, мол, добро пожаловать, гости НЕхорошие
Денис Дымков
Денис Дымков
5 840
Анатолий Снигоренко А как узнать, опасен ли написанный код?
eval не нужно использовать всегда, он подойдет, если вы хотите выполнить что либо, из обычной текстовой строки, использовать его можно, но в меру
Миша Губа
Миша Губа
147