Обойти магические цитаты или просто убедиться, что они выключены? - PullRequest
7 голосов
/ 16 декабря 2008

Стоит ли менять мой код, чтобы он был "более переносимым" и мог справляться с ужасом магических кавычек, или я должен просто убедиться, что он всегда отключен через файл .htaccess?

if (get_magic_quotes_gpc()) {
    $var = stripslashes($_POST['var']);
} else {
    $var = $_POST['var'];
}

Против

php_flag magic_quotes_gpc off

Ответы [ 4 ]

14 голосов
/ 16 декабря 2008

Не учитывайте обе ситуации. Два пути к коду = вдвое больше головной боли, плюс есть большая вероятность, что вы ошибетесь и забудете где-нибудь справиться с обеими ситуациями.

Раньше я проверял, были ли включены или отключены магические кавычки, и если они были включены, отмените их магию (как предлагали другие в ветке). Проблема в том, что вы изменяете настроенную среду (независимо от того, насколько глупой) может ожидать другой программист.

В наши дни я пишу код, как будто магические кавычки отключены, и в моем основном файле include / bootstrap / всегда запускается, проверяю, включены ли магические кавычки или нет. Если они включены, я выбрасываю исключение, которое объясняет, почему это плохо , и даю инструкции о том, как их можно отключить.

Этот подход позволяет вам кодировать одно поведение, побуждает других людей использовать ваш код для правильной настройки своих серверов (магические цитаты исчезают в PHP 6), и если кому-то действительно нужны магические цитаты они могут обработать ваше исключение и взять свою жизнь в свои руки.

4 голосов
/ 16 декабря 2008

Я бы проверил настройку с помощью get_magic_quotes_gpc() и сделал бы большой шумный выход с ошибкой. В случае ошибки сообщите администратору правильную настройку.

2 голосов
/ 16 декабря 2008

Я бы удостоверился, что он выключен, если это возможно (требуется доступ к конфигурации .htaccess или apache). Лучше всего этого избегать, чем лишать его поведения, которое требует больше ресурсов и подвержено ошибкам.

Если отключить его нельзя, ваш пример кода может быть полезен для входных суперглобалей ($ _GET, $ _ POST, ...), но не применяйте его к данным, поступающим из источников, отличных от этих суперглобл. Такое злоупотребление довольно распространено .

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

1 голос
/ 16 декабря 2008

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

...