Jump to content

Волшебные цитаты

Волшебные кавычки были особенностью PHP языка сценариев , в котором строки автоматически экранируются (специальные символы начинаются с обратной косой черты ) перед передачей. Он был введен, чтобы помочь новичкам писать работающие команды SQL без необходимости экранирования вручную. Позже было описано, что он предназначен для предотвращения написания неопытными разработчиками кода , уязвимого для атак с использованием SQL-инъекций .

Эта функция была официально объявлена ​​устаревшей в PHP 5.3.0 и удалена в PHP 5.4 из соображений безопасности. [1]

Концепция

[ редактировать ]

В текущей версии руководства по PHP упоминается, что магические кавычки созданы для того, чтобы «помочь [предотвратить] опасность кода, написанного новичками». [2] Однако первоначально он был представлен в PHP 2 как параметр времени компиляции php.h для msql, экранирующий только одинарные кавычки, «что упрощает передачу данных формы непосредственно в запросы msql». [3] Первоначально он задумывался как «функция для удобства, а не как функция безопасности». [4] [5]

Область использования магических кавычек была расширена в PHP 3. Одинарные кавычки, двойные кавычки, обратная косая черта и нулевые символы во всех введенных пользователем данных имеют обратную косую черту перед передачей в скрипт в $_GET, $_REQUEST, $_POST и $_COOKIE глобальные переменные. Теоретически разработчики могут использовать конкатенацию строк для создания безопасных SQL-запросов на основе данных, предоставленных пользователем. (Это было наиболее точно, когда были актуальны PHP 2 и PHP 3, поскольку основные поддерживаемые базы данных допускали только 1-байтовые наборы символов.)

Волшебные кавычки были включены по умолчанию в новых версиях PHP 3 и 4, но их можно было отключить с помощью magic_quotes_gpc директива конфигурации. Поскольку действие магических кавычек было закулисным и не было очевидным сразу, разработчики могли не знать об их существовании и потенциальных проблемах, которые они могли создать. В документации PHP указано несколько ловушек и рекомендовано отключить их, несмотря на то, что они включены по умолчанию. [6]

Проблемы с магическими кавычками включали:

  • Не все данные, предоставляемые пользователем, предназначены для вставки в базу данных. Их можно отображать непосредственно на экране, сохранять в сеансе или предварительно просматривать перед сохранением. Это может привести к тому, что обратные косые черты будут добавлены там, где они не нужны, и будут показаны конечному пользователю. Эта ошибка часто закрадывается даже в широко используемое программное обеспечение. [7]
  • Не все данные, предоставляемые пользователем и используемые в запросе к базе данных, получены непосредственно из источников, защищенных магическими кавычками. Например, введенное пользователем значение может быть вставлено в базу данных, защищено магическими кавычками, а затем извлечено из базы данных и использовано в последующей операции с базой данных. Последнее использование не защищено магическими кавычками, и наивный программист, привыкший полагаться на них, может не осознавать необходимости явно защищать его.
  • Волшебные кавычки также используют общие функции, предоставляемые PHP. addslashes() функция, которая не поддерживает Unicode и по-прежнему подвержена уязвимостям SQL-инъекций в некоторых многобайтовых кодировках символов. Функции, специфичные для базы данных, такие как mysql_real_escape_string() или, где это возможно, предпочтительны подготовленные запросы со связанными параметрами. [8] [9]
  • Хотя многие системы управления базами данных поддерживают экранирование кавычек с помощью обратной косой черты, стандарт фактически требует использования другой кавычки. Волшебные кавычки не обеспечивают защиты для баз данных, не настроенных для поддержки экранирования кавычек с помощью обратной косой черты.
  • Переносимость является проблемой, если приложение кодируется с предположением, что магические кавычки включены, а затем перемещается на сервер, где они отключены, или наоборот.
  • Добавление магических кавычек и последующее их удаление, где это необходимо, приводит к небольшому, но ненужному увеличению производительности.
  • Волшебные кавычки не защищают от других распространенных уязвимостей безопасности, таких как атаки с использованием межсайтовых сценариев или атаки с внедрением заголовка SMTP .

В ноябре 2005 года основные разработчики PHP решили, что из-за этих проблем функция магических кавычек будет удалена из PHP 6. [10] Когда разработка PHP 6 застопорилась и вместо этого продолжилась разработка ветки 5.x, эта функция была признана устаревшей в PHP 5.3.0 и удалена в версии 5.4. [1]

Другие подходы

[ редактировать ]
  • Некоторые языки, такие как Perl [11] и Руби [12] выберите подход, включающий искажение данных , при котором данные из ненадежных источников, таких как пользовательский ввод, считаются «испорченными» и не могут использоваться для опасных операций до тех пор, пока явно не будут отмечены как заслуживающие доверия, обычно после проверки или кодирования. Поскольку построение SQL-запросов в этом контексте считается «опасным», это вынуждает программиста заняться решением проблемы. Испорченность не решает проблему, но выделяет те случаи, когда существует проблема, чтобы программист мог решить их соответствующим образом.
  • Джоэл Спольски предложил использовать венгерскую систему обозначений , указывающую, являются ли данные безопасными или небезопасными. [13]
  • Современные механизмы баз данных и библиотеки используют параметризованные запросы для передачи данных в базу данных отдельно от команд SQL, что значительно снижает необходимость экранирования данных перед созданием запросов.

См. также

[ редактировать ]
  1. ^ Jump up to: а б «Волшебные цитаты» . Руководство по PHP . PHP.net . Проверено 17 января 2014 г.
  2. ^ «PHP:Зачем использовать магические кавычки?» . PHP-документация . Проверено 19 февраля 2007 г.
  3. ^ «Если переменная MAGIC_QUOTES определена в файле php.h, то эти кавычки будут автоматически экранированы, что упрощает передачу данных формы непосредственно в запросы msql» . Проверено 27 марта 2011 г.
  4. ^ «Волшебные цитаты часто понятны даже опытным PHP-программистам» .
  5. ^ "Re: [PHP3] что такое Magic_quotes?" . Список рассылки PHP-разработчиков . 27 августа 1999 г. Проверено 17 января 2011 г.
  6. ^ «PHP:Почему бы не использовать магические кавычки» . PHP-документация . Проверено 19 февраля 2007 г.
  7. ^ «При редактировании комментария кавычки экранируются дважды» . Трекер проблем WordPress . Проверено 19 февраля 2007 г.
  8. ^ Крис Шифлетт. «addslashes() вместо mysql_real_escape_string()» . Проверено 19 февраля 2007 г.
  9. ^ MySQL АБ. «Изменения в версии 5.0.22 (24 мая 2006 г.)» . Справочное руководство по MySQL 5.0 . Архивировано из оригинала 22 февраля 2007 года . Проверено 19 февраля 2007 г.
  10. ^ Группа PHP (12 ноября 2005 г.). «Протокол встречи разработчиков PHP» . Проверено 19 февраля 2007 г.
  11. ^ Дэн Рэгл (18 апреля 2006 г.). «Введение в режим Taint в Perl» . webreference.com . Проверено 21 марта 2007 г.
  12. ^ «Запереть Руби в сейфе» . Программирование Руби . Архивировано из оригинала 30 мая 2009 г. Проверено 21 мая 2014 г.
  13. ^ Джоэл Спольски (11 мая 2005 г.). «Как сделать неправильный код неправильным» . Джоэл о программном обеспечении: безболезненное управление программным обеспечением . Проверено 19 февраля 2007 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 53ea1b5cf4451a9dd4d0f106b3fc9031__1599041760
URL1:https://arc.ask3.ru/arc/aa/53/31/53ea1b5cf4451a9dd4d0f106b3fc9031.html
Заголовок, (Title) документа по адресу, URL1:
Magic quotes - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)