Вопрос по php, wordpress, sanitize – Используя Wordpress, кто-нибудь может сказать мне лучший способ дезинфекции ввода?

14

m разработка приложения с использованием Wordpress в качестве CMS.

У меня есть форма с большим количеством полей ввода, которые необходимо очистить перед сохранением в базе данных.

Я хочу предотвратить инъекцию SQL, вставив код JavaScript и PHP и другой вредоносный код.

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

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

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

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

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

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

Ваш Ответ

1   ответ
16

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

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

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

m теперь преобразует поля ввода, которые могут иметь акценты, используя 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-экранирования.

Для выполнения SQL-запросов в WP вы должны использовать $ wpdb->метод prepare () вместо использования mysql_real_escape_string. Если вы хотите использовать WP API в любом случае. nickohrn

Похожие вопросы