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

14

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

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

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

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

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

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

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

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

Ваш Ответ

1   ответ
16

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

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

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

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

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

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