Это веб-приложение будет установлено в системах с различными конфигурациями, и в некоторых из них (к сожалению) будут включены [магические кавычки], а в других отключены.
Как я заметил в комментарии к другому ответу, в руководстве по PHP есть целый раздел , посвященный борьбе с ужасом - магическими кавычками. Обычно вы можете либо отключить его локально в .htaccess, либо исправить данные по мере их поступления. Лично я бы не имел дела с хостинг-провайдером, у которого он включен по умолчанию.
Ранее я делал целое выражение if для addslashes()
, когда оно отключено для ввода данных
Хлоп! addslashes
является , а не адекватной защитой. При использовании старого расширения MySQL вам нужно , чтобы использовать mysql_real_escape_string
после установки набора символов. Невыполнение этого требования может привести к огромной уязвимости .
... что нужно сделать с запросами PDO, подобными этим:
Кроме установки набора символов подключения, ничего! ЗОП будет использовать реально подготовленные заявления, когда сможет. Это означает, что сначала он отправит запрос с заполнителями на сервер, чтобы он мог его обработать, а затем отдельно отправит аргументы. Это делает запрос невосприимчивым к SQL-инъекции.
(Некоторые базы данных не поддерживают подготовленные операторы с PDO. Для них PDO обрабатывает запрос, заменяя заполнители на кавычки, экранированные значения. Результат тот же - защищенность от внедрения SQL.)
Кроме того, насколько необходимо в конце закрыть обработчик базы данных? В чем вред не делать этого?
Как и в других обработчиках базы данных PHP, нет необходимости закрывать соединение - когда скрипт завершится, соединение закроется. ( Даже не думайте о постоянных соединениях .)
Является ли PDO хорошей опцией для CMS, которая будет установлена на многих серверах? Достаточно ли распространен PDO там, где он будет включен на большинстве серверов?
PDO стал стандартом в PHP 5.1, но это не значит, что он всегда доступен. Большинство дистрибутивов Linux разделяют все опций доступа к базе данных PHP, поэтому при их установке также устанавливаются обязательные библиотеки. Иногда некомпетентные или неопытные хостинг-провайдеры не будут устанавливать пакеты PDO, чтобы согласиться с другими вариантами доступа к базе данных, не понимая, что они делают. Обычно это можно исправить, просто попросив их включить PDO и переключившись на другой хост, если они не хотят или не могут.
Многие современные фреймворки предпочитают строить поверх PDO, но делают доступными другие варианты. Например, Zend Framework Zend_Db имеет адаптеры для PDO, mysqli и некоторых других. Если вы боитесь, что PDO не всегда будет доступен, использование слоя адаптера может вам помочь. (Как и большинство компонентов ZF, Zend_Db не сильно зависит от других компонентов ZF, что означает, что вы можете легко связать его с вашим кодом.)