Почему я должен использовать URL-адрес esc?


Эта штука затрудняет мое кодирование. Кодекс Wordpress обосновывает использование esc_url, неопределенно говоря о безопасности. Но действительно ли это стоит того, чтобы беспокоиться?

Например, в чем заключается важное практическое преимущество безопасности при использовании

<?php echo esc_url( home_url( '/' ) ); ?>

Вместо

<?php echo home_url() ?>

PS: Я говорю не о разработке темы, а о конкретном сайте.

 12
Author: IXN, 2015-09-12

4 answers

Если вы проверите документацию по Проверке данных , то об этой функции можно сказать следующее:

Всегда используйте esc_url при очистке URL-адресов (в текстовых узлах, узлах атрибутов или где-либо еще). Отклоняет URL-адреса, в которых отсутствует один из предоставленных протоколов белого списка [...], удаляет недопустимые символы и удаляет опасные символы.

Вот оно - практическое преимущество в плане безопасности. Действительный протокол, никаких мутных символов.

Ответ о необходимости твердо да. Экранирование вывода - это самая простая практика обеспечения безопасности.

 13
Author: Rarst, 2015-09-12 20:33:10

Что ж, весь пользовательский ввод должен быть очищен... Если URL, который вы вводите, не является пользовательским вводом (например, настройка сайта кем-то, кому вы полностью доверяете, жестко заданные значения), вы можете отказаться от esc-url.

Но если бы я мог ввести этот URL на ваш сайт, я мог бы легко ввести код js или код перенаправления... или даже код на стороне сервера в некоторых ситуациях.

Это может привести к захвату сеанса, краже учетных записей ваших пользователей и другим плохим вариантам.

Изменить:

В ваш пример esc_url( home_url( '/' ) );
он работал с полужестким значением! поэтому esc_url можно исключить.
Тем не менее, я все еще не понимаю, зачем беспокоиться о различиях между тем, когда есть угроза, и когда ее нет, и, как правило, предлагаю сохранить esc_url() для каждого значения.

 3
Author: Tomer W, 2019-10-17 07:08:02

Еще кое-что нужно держать в голове о esc_url() означает что-то вроде <a href="SANITIZE_THIS_URL">your_text</a>. если вы собираетесь использовать URL-адрес в выводе HTML, например атрибут href для ссылки или атрибут src для элемента изображения, вам следует использовать esc_url().

esc_url_raw() это для других случаев, когда вам нужен чистый URL-адрес, но вы не хотите, чтобы HTML-объекты были закодированы. Таким образом, любое использование, не связанное с HTML (БД, перенаправление), будет использовать это.

Функция esc_url_raw() будет делать почти то же самое, что и esc_url(), но она не будет декодировать сущности, что означает, что он не заменит & на & и так далее. Как отметил Марк, безопасно использовать esc_url_raw() в запросах к базе данных, перенаправлениях и функциях HTTP, таких как "wp_remote_get()" для получения дополнительной информации о esc_url_raw()

 2
Author: MD MUSA, 2015-09-12 21:29:11

Esc_url используется для создания допустимого HTML-кода (не для очистки ввода). Вы должны использовать это в любое время, когда вы не на 100% уверены, что то, что вы хотите вывести, является допустимым HTML для этого контекста.

 1
Author: matthew, 2015-09-12 20:29:34