Волшебная строка
В компьютерном программировании — волшебная строка это входные данные, которые, по мнению программиста, никогда не поступят извне и которые активируют скрытые в противном случае функции. Пользователь этой программы, скорее всего, предоставит входные данные, которые в большинстве ситуаций дадут ожидаемый ответ. Однако если пользователь на самом деле невинно вводит заранее определенные входные данные, вызывая внутренние функции, ответ программы часто оказывается для пользователя совершенно неожиданным (поэтому он выглядит «волшебным»). [1]
Фон
[ редактировать ]Обычно реализация магических строк связана с ограничениями по времени. Разработчик должен найти быстрое решение, а не углубляться в проблему и искать лучшее решение.
Например, при тестировании программы, которая принимает личные данные пользователя и проверяет номер его кредитной карты, разработчик может решить добавить ярлык волшебной строки, в результате чего ввод маловероятного ввода «***» в качестве номера кредитной карты приведет к тому, что программа автоматически действовать так, как если бы карта была действительна, не тратя время на ее проверку. Если разработчик забудет удалить волшебную строку, а пользователь окончательной версии программы случайно введет «***» в качестве номера кредитной карты при заполнении формы, пользователь непреднамеренно активирует скрытую функциональность.
Разрешение
[ редактировать ]Ситуации/проблемы причины
[ редактировать ]Часто с самого начала участия в проекте существуют значительные временные ограничения, находящиеся вне контроля разработчика. Общие проблемы, которые могут привести к возникновению этого антишаблона:
- Ноль != ноль [2] или любой вариант, в котором тип данных не сравнивается побитово с предположительно идентичным типом. Эта проблема может возникнуть даже в одной и той же среде разработки (тот же язык программирования и компилятор). Эта проблема имеет долгую историю для числовых и логических типов, и большинство компиляторов справляются с ней хорошо (с соответствующими предупреждениями и ошибками, разрешением по умолчанию и т. д.). Типы, допускающие значение NULL, такие как строки, имеют трудность из-за исторически различных определений NULL . Выдаваемые ошибки/предупреждения часто являются общими или представляют собой «наиболее подходящую» ошибку по умолчанию, сообщение которой на самом деле не описывает, что происходит. Если разработчик не может получить достаточно подсказок, чтобы отследить проблему посредством отладки, использование короткого пути и кодирование строки «по умолчанию» может быть единственным способом сохранить проект в рамках графика. Одним из решений этой проблемы может быть применение паттерна Null Object . [3]
- Запрограммирован в угол. Иногда дизайн кажется прямолинейным и даже простым, но оказывается, что он имеет логический изъян, зависящий от возможных действий пользователя, из-за часто непредвиденных обстоятельств ближе к концу запланированной разработки. Таким образом, разработчик может почувствовать необходимость реализовать пользовательский ввод со специальными возможностями безопасности/работы, чтобы справиться с такими обстоятельствами. Это может быть особенно иронично, поскольку иногда становится очевидным, что более надежная конструкция с самого начала, скорее всего, оставила бы место для устранения этого недостатка. Однако реализация этого, возможно, заняла бы слишком много времени и могла бы противоречить фундаментальной инженерной концепции KISS , сохраняющей простоту конструкции и реализации и отвечающей только первоначальным необходимым требованиям.
- Разрешение внешнего доступа к глобальному флагу. [4] Чрезмерная уверенность в том, что глобальный флаг никогда не может быть установлен случайно или злонамеренно (часто вполне разумное предположение), оправдывает такую реализацию для целей тестирования и отладки, особенно для небольших приложений с простыми интерфейсами. Однако если программа распространена значительно, то установка флага обычно является лишь вопросом времени. Очевидным решением является никогда не использовать глобальную переменную таким образом. Разработчик также может сделать флаг доступным по обстоятельствам . Таким образом, программа сама по себе будет обрабатывать волшебную строку так же, как и любой другой ввод. [5] Затем пользователь должен воспроизвести настройку, а также создать некоторый набор других событий, которые незаметно позволяет пользовательский интерфейс, чтобы флаг принял настройку; гораздо более маловероятный сценарий, хотя все еще возможный.
Строгое форматирование
[ редактировать ]Ограничение формата ввода является возможным решением для обслуживания (исправления ошибок). [ нужны разъяснения ] По сути, это означает проверку входной информации, чтобы убедиться, что она имеет правильный формат, чтобы уменьшить вероятность обнаружения волшебной строки пользователем. Примеры включают проверку номера телефона, чтобы гарантировать, что он содержит только цифры (и, возможно, в ограниченном объеме пробелы и знаки препинания) или проверку того, что имя человека имеет имя и фамилию (и правильно пишется с заглавной буквы). Для магической строки в коде проверки делается исключение, чтобы она не была отклонена проверкой. Ожидается, что, поскольку пользователь, скорее всего, быстро заметит строгое соблюдение форматирования, ему, скорее всего, не придет в голову попытаться ввести строку, не соответствующую формату. Поэтому маловероятно, что пользователь попытается использовать волшебную строку.
Как и в случае любого процесса проверки входных данных, важно убедиться, что формат не является ограничительным и непреднамеренно ограничивает использование приложения некоторыми пользователями. Примером этого является ограничение номера телефона или почтового индекса. [6] ввод данных основан на системе одной страны (например, требование от каждого пользователя указать пятизначный почтовый индекс ), что создает проблемы для законных пользователей, находящихся в других странах.
Целенаправленная реализация
[ редактировать ]Как это часто бывает с антишаблонами, существуют конкретные сценарии, в которых магические строки являются правильным решением для реализации. Примеры включают чит-коды. [7] и пасхальные яйца . Более того, бывают случаи, когда пользователи изобретают волшебные строки, и системы, которые не запрограммированы для их принятия, могут привести к неожиданным результатам, таким как отсутствие номерных знаков. [8]
Инциденты
[ редактировать ]![]() |
Ниже приведен список некоторых известных случаев, когда использование волшебной строки приводило к проблемам.
- В нескольких различных случаях автомобилисты с персонализированными строками на номерных знаках транспортных средств получали неверные штрафы за нарушение правил дорожного движения . В затронутых системах выдачи билетов, когда полицейские заполняли штраф за нарушение правил дорожного движения для автомобиля без номерного знака, они писали «NOPLATE», «NOTAG», «ОТСУТСТВУЕТ» или что-то подобное. Это вызвало проблемы, когда автомобилистам были выданы настоящие номерные знаки с этими значениями, и, таким образом, они начали получать многочисленные штрафы за нарушение правил дорожного движения, предназначенные для этих транспортных средств без номеров. [8]
- В 1999 году хакеры обнаружили уязвимость в безопасности Hotmail , которая позволяла любому войти в любую учетную запись Hotmail, используя пароль «eh». Тогда это назвали «самым распространенным инцидентом безопасности в истории Интернета». [9]
- Люди с фамилией Нуль сообщали о различных проблемах при использовании онлайн-систем, таких как невозможность забронировать билеты на самолет, использовать веб-сайты государственных налогов или оплатить счета за коммунальные услуги. [10] Проблема возникает из-за того, что эти системы путают свое имя с нулевым указателем . В зависимости от системы это может привести к тому, что система не покажет свое имя, попросит пользователя ввести другое имя (иногда с сообщением о том, что поле имени осталось пустым) или отобразит сообщение об ошибке. [11]
См. также
[ редактировать ]- Магическое число (программирование)
- Ошибки форматирования и хранения времени , проблемы, которые могут быть вызваны магией.
- Значение Sentinel (также известное как значение флага, значение отключения, мошенническое значение, значение сигнала, фиктивные данные)
- Канарское значение , специальное значение для обнаружения переполнения буфера.
- Чит-коды видеоигр , имеющие одинаковое происхождение
- ХИЗЗИ (команда)
Ссылки
[ редактировать ]- ^ Крис Фалтер (6 марта 2008 г.), Хорошее решение для данных магических строк , Egghead Cafe Tuturiols , получено 11 мая 2009 г.
- ^ Ван Лам (21 мая 2003 г.), Поведение NULL в SQL , Стэнфордский университет , получено 13 мая 2009 г.
- ^ Эрик Фриман, Элизабет Фриман, Кэти Сьерра, Берт Бейтс; 2004, Шаблоны проектирования Head First , 1-е изд., О'Рейли, глава 6, стр. 214, Шаблон команды , ISBN 0-596-00712-4 , ISBN 978-0-596-00712-6
- ^ Джеймс Маккаффри (2009), Автоматизация тестирования для веб-приложений ASP.NET с SSL , Microsoft , получено 13 мая 2009 г.
- ^ Эндрю Камминг; 2007, SQL Hacks , 1-е изд., О'Рейли, стр. 174, Предотвращение атаки SQL-инъекцией , ISBN 0-596-52799-3 , ISBN 978-0-596-52799-0
- ^ Брайан Найт, Аллан Митчелл, Даррен Грин, Дуглас Хинсон, Кэти Келленбергер; 2005, Службы интеграции Professional SQL Server 2005 , 1-е изд., John Wiley and Sons, глава 5, стр. 129, Обработка грязных данных , ISBN 0-7645-8435-9 , ISBN 978-0-7645-8435-0
- ^ Сезен, Тонгук Ибрагим; Исикоглу, Дигдем (27 апреля 2007 г.). «От Озанов к режимам Бога: мошенничество в интерактивных развлечениях разных культур» (PDF) . п. 8 . Проверено 24 января 2009 г.
- ^ Jump up to: а б «Что происходит, когда на вашем номерном знаке написано «НЕТ НОМЕРА»?» . 30 октября 1999 г.
- ^ Глэйв, Джеймс (30 августа 1999 г.). «Хакеры Hotmail: «Мы сделали это» » . Проводной . Конде Наст . Проверено 16 июля 2024 г.
- ^ Баранюк, Крис (25 марта 2016 г.). «У этих несчастных людей имена, которые ломают компьютеры» . BBC.com . Проверено 30 января 2022 г.
- ^ Налл, Кристофер (5 ноября 2015 г.). «Здравствуйте, я мистер Нуль. Моё имя делает меня невидимым для компьютеров» . Проводной . Проверено 30 января 2022 г.