Дефолты могут вас потопить
TL;DR: Относитесь к неизвестным ответам как к несанкционированным, а не как к действительным.
Сегодня — день компьютерной безопасности , и каждый программист должен осознать свою ответственность.
Представьте себе приложение, обрабатывающее продажи, которое использует пулы ответов от процессоров кредитных карт для обработки транзакций.
Каждый процессор кредитных карт предоставляет предопределенные коды ответов для различных ситуаций, таких как недостаточный баланс или истекший срок действия карты.
Проблема возникает, когда процессор добавляет новый код ответа для отклоненных транзакций, но не уведомляет об этом платформу.
Приложение не распознает новый код, по умолчанию обрабатывает его как «не найденный» и разрешает покупку.
Пользователи замечают этот недостаток и используют его для совершения несанкционированных покупок.
Доходы платформы резко падают, что приводит к банкротству.
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; }
Вы можете обнаружить этот запах, просмотрев логику обработки ошибок.
Проверьте, регистрирует ли система и отклоняет ли она нераспознанные случаи.
Автоматизированные тесты могут помочь определить, приводят ли новые или неожиданные входные данные к допустимым действиям.
Инструменты статического анализа могут помочь, отметив потенциально неполную обработку ошибок.
Крайне важно поддерживать однозначное соответствие между внутренним представлением ответов платежного процессора в вашем приложении и фактическими кодами, возвращаемыми процессором.
Когда вы нарушаете биекцию , вы создаете несоответствие.
Приложение неправильно интерпретирует неизвестные коды, что приводит к неожиданному поведению, уязвимостям безопасности и потенциально катастрофическим последствиям для бизнеса.
Инструменты ИИ могут создать такой запах, если вы не укажете, как обрабатывать неизвестные случаи.
Например, общая обработка ошибок может по умолчанию выдавать безобидные результаты, такие как «не найдено» или «успешно».
Генераторы ИИ могут устранить этот запах, если вы дадите им указание обрабатывать неизвестные случаи как несанкционированные и уделять особое внимание регистрации и тестированию неожиданных сценариев.
Помните: помощники на основе искусственного интеллекта совершают много ошибок
Без надлежащих инструкций | С конкретными инструкциями |
---|---|
Всегда будьте осторожны в неизвестных случаях.
Значения по умолчанию, такие как «не найдено», могут привести к серьезным проблемам безопасности и финансовым потерям.
Сделайте регистрацию и отклонение неизвестных ответов частью своей практики разработки.
Принимайте решения в пользу безопасности при программировании.
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.