Почему я должен использовать URL-адрес esc?
Эта штука затрудняет мое кодирование. Кодекс Wordpress обосновывает использование esc_url, неопределенно говоря о безопасности. Но действительно ли это стоит того, чтобы беспокоиться?
Например, в чем заключается важное практическое преимущество безопасности при использовании
<?php echo esc_url( home_url( '/' ) ); ?>
Вместо
<?php echo home_url() ?>
PS: Я говорю не о разработке темы, а о конкретном сайте.
4 answers
Если вы проверите документацию по Проверке данных , то об этой функции можно сказать следующее:
Всегда используйте esc_url при очистке URL-адресов (в текстовых узлах, узлах атрибутов или где-либо еще). Отклоняет URL-адреса, в которых отсутствует один из предоставленных протоколов белого списка [...], удаляет недопустимые символы и удаляет опасные символы.
Вот оно - практическое преимущество в плане безопасности. Действительный протокол, никаких мутных символов.
Ответ о необходимости твердо да. Экранирование вывода - это самая простая практика обеспечения безопасности.
Что ж, весь пользовательский ввод должен быть очищен... Если URL, который вы вводите, не является пользовательским вводом (например, настройка сайта кем-то, кому вы полностью доверяете, жестко заданные значения), вы можете отказаться от esc-url.
Но если бы я мог ввести этот URL на ваш сайт, я мог бы легко ввести код js или код перенаправления... или даже код на стороне сервера в некоторых ситуациях.
Это может привести к захвату сеанса, краже учетных записей ваших пользователей и другим плохим вариантам.
Изменить:
В ваш пример esc_url( home_url( '/' ) );
он работал с полужестким значением! поэтому esc_url
можно исключить.
Тем не менее, я все еще не понимаю, зачем беспокоиться о различиях между тем, когда есть угроза, и когда ее нет, и, как правило, предлагаю сохранить esc_url() для каждого значения.
Еще кое-что нужно держать в голове о
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()