Код Smell 245 — Exec() и Eval()

Код Smell 245 — Exec() и Eval()

5 апреля 2024 г.

Отличная дверь для хакеров

<блок-цитата>

TL;DR: Не используйте метапрограммирование. Это не так уж и круто

Проблемы

  • Безопасность
  • Ограниченный контроль

Решения

  1. Используйте прямые звонки
  2. Оберните выполнение в примитивную и контролируемую команду
  3. Обеззараживать
  4. Контекст

    Разработчики используют функции eval() и exec() для вычисления произвольных выражений из строк.

    Они могут быть мощным инструментом в определенных контекстах, но сопряжены с рядом рисков и проблем, особенно когда используются с ненадежными входными данными или когда поведение кода не полностью контролируется или не понимается.

    Пример кода

    Неверно

    def calculate(mathOperand, firstArgument, secondArgument):
        return eval(f'{firstArgument} {mathOperand} {secondArgument}')
    
    # Sample usage to multiply two numbers
    result = calculate('*', 4, 6)
    
    # Injection to remove all files
    calculate('', "__import__('os').system('rm -rf *')",''))
    

    Верно

    def calculate(mathOperand, firstArgument, secondArgument):
        if mathOperand == '+':
            return firstArgument + secondArgument
        elif mathOperand == '-':
            return firstArgument - secondArgument
        elif mathOperand == '*':
            return firstArgument * secondArgument
        elif mathOperand == '/':
            if secondArgument != 0:
                return firstArgument / secondArgument
            else:
                return "Error: Division by zero"
        else:
            return "Error: Invalid operation - Do not hack!"
    
    # This is a quick solution but another smell
    # You should avoid this kind of switches and iterate to 
    # a Polymorphic Hierarchy
    

    Обнаружение

    • Автоматически

    Вы можете выполнить поиск eval() в коде

    Теги

    • Метапрограммирование

    Уровень

    • Средний

    ИИ-помощники

    Большинство ИИ-помощников избегают использования eval() в своих решениях.

    Они также распознают это как запах кода и предлагают разные варианты.

    Заключение

    Избегайте этого метапрограммного решения, жестко запрограммировав все возможные сценарии и избегая чрезмерных обобщений.

    Отношения

    Code Smell 207 – динамические методы< /п>

    Код Smell 189 – не очищенный ввод

    Code Smell 215 – десериализация уязвимости объекта

    Дополнительная информация

    https://hackernoon.com/laziness-chapter-i-meta-programming -6s4l300e?embedable=true

    Отказ от ответственности

    Запахи кода — это мои мнение.

    Кредиты

    Фото Яна на Отменить заставку


    <блок-цитата>

    Когда вы на самом деле садитесь писать код, вы узнаете вещи, которые вы не получили, размышляя о них в терминах моделирования… там есть процесс обратной связи, который вы действительно можете получить, только выполнив некоторые вещи и увидев, что работает.

    Мартин Фаулер

    https://hackernoon.com/400- Thought-provoking-software-engineering -quotes?embedable=true


    Эта статья входит в серию CodeSmell.

    https://hackernoon .com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd?embedable=true


    Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE