Intereting Posts
PHP – SQL – отключить, скрыть или включить кнопку на основе данных Получение идентификатора электронной почты отправителя при получении писем от Gmail MySQL где предложение равно чему угодно (SELECT * WHERE col = ANY_VALUE) Как обнаружить внутренние вершины в группах из 2d полигонов? (Например, ZIP-коды для определения территории) Можно ли использовать расширения PECL в HipHop? PHP заменить строку вставить значение без установки первичного ключа Скремблирование изображений ссылок на изображения в PHP Проверка Curl, возвращающий «Идентификатор ресурса № 2» в качестве ответа, почему? Как проверить, успешно ли Ci вставил данные Как изменить путь загрузки по умолчанию для загрузки файла jquery Форма Symfony не сохраняет объект с отношением ManyToMany Как загрузить изображения в обычной форме вставки (MySql)? после загрузки изображение должно иметь три версии разных размеров и разных имен Как получить числовые типы из MySQL с помощью PDO?

Используя WordPress, может ли кто-нибудь сказать мне лучший способ дезинфекции ввода?

Я разрабатываю приложение, использующее WordPress в качестве CMS.

У меня есть форма с большим количеством полей ввода, которые необходимо очистить перед сохранением в базе данных.
Я хочу предотвратить SQL-инъекцию, используя javascript и PHP-код и другой вредоносный код.

В настоящее время я использую свои собственные методы для дезинфекции данных, но я считаю, что лучше использовать функции, которые использует WP.

Я посмотрел на Data Validation в WordPress, но я не уверен, сколько из этих функций я должен использовать и в каком порядке. Может ли кто-нибудь сказать, какие функции WP лучше всего использовать?

В настоящее время я «дезинфицирую» свой вклад, выполняя следующие действия:

  1. Потому что персонажи с акцентами (é, ô, æ, ø, å) были загружены забавным способом в базе данных (хотя мои таблицы установлены как ENGINE=InnoDB , DEFAULT CHARSET=utf8 и COLLATE=utf8_danish_ci ), теперь я конвертируя поля ввода, которые могут иметь акценты, используя htmlentities ().

  2. При создании строки SQL для ввода данных я использую mysql_real_escape_string() .

Я не думаю, что этого достаточно, чтобы предотвратить атаки. Поэтому предложения по улучшению очень ценятся.

Ввод «санитария» является фиктивным.

Вам не следует пытаться защитить себя от проблем с инъекциями путем фильтрации (*) или выхода из строя, вы должны работать с необработанными строками до тех пор, пока вы не поместите их в другой контекст. В этот момент вам понадобится правильная функция экранирования для этого контекста, которая представляет собой mysql_real_escape_string для запросов MySQL и htmlspecialchars для вывода HTML.

(WordPress добавляет свои собственные функции экранирования, такие как esc_html , которые в принципе не отличаются).

(*: хорошо, за исключением требований к конкретным приложениям, например, проверка адреса электронной почты – это действительно адрес электронной почты, обеспечивающий разумный пароль и т. д. Также существует разумный аргумент для фильтрации управляющих символов на входе хотя это редко делается на самом деле.)

Теперь я конвертирую поля ввода, которые могут иметь акценты, используя htmlentities ().

Я настоятельно рекомендую не делать этого. Ваша база данных должна содержать необработанный текст; вам намного сложнее выполнять операции с базами данных в столбцах, если вы закодировали его как HTML. Вы избегаете символов, таких как < и " одновременно с символами, отличными от ASCII. Когда вы получаете данные из базы данных и используете их по какой-то другой причине, кроме копирования на страницу, теперь у вас есть ложный HTML- ускользает в данных. Не убегайте в HTML-код до последнего момента, когда вы пишете текст на странице.

Если у вас возникли проблемы с получением символов, отличных от ASCII, в базе данных, это другая проблема, которую вы должны решить сначала, а не искать неустойчивые обходные пути, такие как хранение данных в формате HTML. Здесь есть несколько сообщений о том, как заставить PHP и базы данных правильно говорить UTF-8, но главное – убедиться, что сами страницы вывода HTML правильно используются как UTF-8, используя заголовок / метафайл Content-Type . Затем проверьте, что ваше соединение MySQL установлено на UTF-8, например, с помощью mysql_set_charset() .

При создании строки SQL для ввода данных я использую mysql_real_escape_string ().

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