Я пытаюсь понять очистку данных (не проверку данных), чтобы помочь мне написать безопасные темы для WordPress. Я искал в Интернете, пытаясь найти исчерпывающее руководство для разработчиков тем с подробным описанием лучших практик. Я нашел несколько ресурсов, в том числе страницу кодекса под названием «Проверка данных», но ни один из них не был мне полезен. На странице кодекса перечислены доступные функции очистки, их использование и что они делают, но не объясняется, почему вы будете использовать одну над другой или в какой ситуации вы будете использовать определенную функцию очистки. Цель этого поста - попросить всех предоставить примеры плохого / неанизированного кода и того, как его следует переписать для правильной очистки. Это может быть общий код для дезинфекции заголовка поста или src post thumnails или более сложные коды, которые обрабатывают дезинфекцию$_POST
данные для запросов Ajax.
Кроме того, я хотел бы знать, автоматически ли функции WordPress для добавления / обновления базы данных (например, упомянутые в блоке кода ниже) позаботятся о работе по очистке? Если да, то есть ли исключения, когда вы предпримете дополнительные меры для очистки данных, отправляемых в эти функции WordPress?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
Кроме того, нужно ли проводить очистку по-разному при отображении HTML-кода в PHP по сравнению с встроенным в HTML-кодом PHP? Чтобы быть более понятным из того, что я спрашиваю, вот код:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Оба приведенных выше утверждения достигают одного и того же. Но нужно ли их дезинфицировать по-другому?
Ответы:
Эта страница кодекса объясняет это довольно хорошо, я думаю.
Вероятно, самая важная и часто используемая функция
esc_attr
. Возьмите этот пример:Если
$author_name
содержит"
символ, вы закрываете свой атрибут, и если за этим символом следуют,onclick="do_something();"
это может ухудшиться :)Выполнение
print esc_attr($author_name)
гарантирует, что такие символы закодированы, и браузер не делает то, что он не должен делать.В одном случае вам это не нужно: когда вы ожидаете число, в этом случае вы можете просто преобразовать входные данные в целое число, например:
Вышеперечисленные мета-функции уже заботятся о санации входных данных для хранилища базы данных, поэтому вам не нужно об этом беспокоиться.
Этот
wpdb->prepare()
метод необходимо использовать, когда вы выполняете запросы к БД самостоятельно. Вот пример:%s
И%d
ключевые слова заменяются с продезинфицировать значения _POST $.Очень распространенная ошибка, которую я вижу во многих плагинах в репозитории WP.org, заключается в передаче ему уже подготовленного запроса (и плохо подготовленного), например:
Не делай этого :)
Нет.
источник
Это видео от Mark Jaquith прояснило все для меня. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
источник