paint-brush
Запах кода 282 — плохие значения по умолчанию и как их исправитьк@mcsee
793 чтения
793 чтения

Запах кода 282 — плохие значения по умолчанию и как их исправить

к Maximiliano Contieri4m2024/12/02
Read on Terminal Reader

Слишком долго; Читать

Рассматривайте неизвестные ответы как несанкционированные, а недействительные.
featured image - Запах кода 282 — плохие значения по умолчанию и как их исправить
Maximiliano Contieri HackerNoon profile picture

Дефолты могут вас потопить

TL;DR: Относитесь к неизвестным ответам как к несанкционированным, а не как к действительным.

Проблемы

  • Риски безопасности
  • Игнорирование неизвестных случаев
  • Ошибка Неправильная интерпретация
  • Возврат к допустимым состояниям по умолчанию
  • Несоответствие разрешений
  • Невозможность регистрации событий
  • Потенциал эксплуатации

Решения

  1. Проверьте все ответы по закрытому набору известных кодов.
  2. По умолчанию (и неизвестно) для неавторизованных или Удалить значения по умолчанию .
  3. Регистрируйте все несоответствующие или неожиданные случаи для анализа.
  4. Тестирование с использованием граничных сценариев.
  5. Регулярно синхронизируйте пулы ответов с процессорами, чтобы избежать устаревания кодов.
  6. Сосредоточьтесь на безопасности, сделав этот процесс более левым.
  7. Проектируйте системы, устойчивые к изменениям, чтобы справляться с меняющимися сценариями.

Контекст

Сегодня — день компьютерной безопасности , и каждый программист должен осознать свою ответственность.


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


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


Проблема возникает, когда процессор добавляет новый код ответа для отклоненных транзакций, но не уведомляет об этом платформу.


Приложение не распознает новый код, по умолчанию обрабатывает его как «не найденный» и разрешает покупку.


Пользователи замечают этот недостаток и используют его для совершения несанкционированных покупок.


Доходы платформы резко падают, что приводит к банкротству.

Образец кода

Неправильный

 String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }

Верно

 String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }

Обнаружение

  • [x] Руководство

Вы можете обнаружить этот запах, просмотрев логику обработки ошибок.


Проверьте, регистрирует ли система и отклоняет ли она нераспознанные случаи.


Автоматизированные тесты могут помочь определить, приводят ли новые или неожиданные входные данные к допустимым действиям.


Инструменты статического анализа могут помочь, отметив потенциально неполную обработку ошибок.

Теги

  • Безопасность

Уровень

  • [x] Средний

Почему важна биекция

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


Когда вы нарушаете биекцию , вы создаете несоответствие.


Приложение неправильно интерпретирует неизвестные коды, что приводит к неожиданному поведению, уязвимостям безопасности и потенциально катастрофическим последствиям для бизнеса.

Генерация ИИ

Инструменты ИИ могут создать такой запах, если вы не укажете, как обрабатывать неизвестные случаи.


Например, общая обработка ошибок может по умолчанию выдавать безобидные результаты, такие как «не найдено» или «успешно».

Обнаружение ИИ

Генераторы ИИ могут устранить этот запах, если вы дадите им указание обрабатывать неизвестные случаи как несанкционированные и уделять особое внимание регистрации и тестированию неожиданных сценариев.

Попробуйте!

Помните: помощники на основе искусственного интеллекта совершают много ошибок

Без надлежащих инструкций

С конкретными инструкциями

ЧатGPT

ЧатGPT

Клод

Клод

Недоумение

Недоумение

Второй пилот

Второй пилот

Близнецы

Близнецы

Заключение

Всегда будьте осторожны в неизвестных случаях.


Значения по умолчанию, такие как «не найдено», могут привести к серьезным проблемам безопасности и финансовым потерям.


Сделайте регистрацию и отклонение неизвестных ответов частью своей практики разработки.


Принимайте решения в пользу безопасности при программировании.

Отношения

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352

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

Код Запахи - это мое мнение .

Кредиты

Фото Натаны Ребусас на Unsplash

https://www.youtube.com/watch?v=J2QOejhA6ek


Предположения — мать всех неудач.

Саид Уиссаль

Программная инженерия Великие цитаты


Эта статья является частью серии CodeSmell.

Как найти проблемные части вашего кода