Обойти магические кавычки или просто убедиться, что они выключены?
Стоит ли менять мой код, чтобы он был "более переносимым" и мог справляться с ужасом магических кавычек, или я должен просто убедиться, что он всегда отключен через файл.htaccess?
if (get_magic_quotes_gpc()) {
$var = stripslashes($_POST['var']);
} else {
$var = $_POST['var'];
}
Против
php_flag magic_quotes_gpc off
4 ответа
Не приспосабливайте обе ситуации. Два пути к коду = вдвое больше головной боли, плюс есть большая вероятность, что вы ошибетесь и забудете где-нибудь справиться с обеими ситуациями.
Раньше я проверял, были ли включены или отключены магические кавычки, и если они были включены, отмените их магию (как предлагали другие в ветке). Проблема в том, что вы изменяете настроенную среду (независимо от того, насколько глупой) может ожидать другой программист.
Сейчас я пишу код, как будто магические кавычки отключены, и в моем основном файле include/bootstrap/ всегда запускается, проверяю, включены ли магические кавычки или нет. Если они включены, я выбрасываю исключение, которое объясняет, почему это плохо, и даю инструкции о том, как их можно отключить.
Этот подход позволяет вам кодировать одно поведение, побуждает других людей использовать ваш код для правильной настройки своих серверов (магические кавычки исчезают в PHP 6), и если кому-то действительно нужны магические кавычки, они могут обработать ваше исключение и лишить себя жизни. в свои руки.
Я бы проверил настройку используя get_magic_quotes_gpc()
и сделать большой шумный выход с ошибкой. В случае ошибки сообщите администратору о правильной настройке.
Я хотел бы убедиться, что он выключен, если это возможно (требуется доступ к конфигурации.htaccess или apache). Лучше всего этого избегать, чем лишать его поведения, которое требует больше ресурсов и подвержено ошибкам.
Если отключить его нельзя, ваш пример кода может быть полезен для входных суперглобалей ($_GET,$_POST,...), но не применяйте его к данным, поступающим из источников, отличных от этих суперглобл. Такое неправильное использование довольно распространено.
Просто убедитесь, что при выключении magic_quotes_gpc() имеется надлежащий механизм экранирования, защищающий вас от взлома SQL (например, mysql_real_escape_string() или подготовленных операторов PDO). Вы можете прочитать больше о предотвращении инъекций SQL - здесь.
С другой стороны, php 6 больше не будет их поддерживать. Таким образом, написание кода для них может быть полезным в будущем.