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


12

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

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

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

вместо того

<?php echo home_url() ?>

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

Ответы:


12

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

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

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

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


2
При всем уважении, я не вижу, как домашняя ссылка, например, может представлять угрозу безопасности. Может быть, эти рекомендации относятся к созданию темы и не применяются для «частного» кода? В конце концов, может быть лучше жестко закодировать домашний адрес и другие ссылки в html и вообще не использовать php, если существуют угрозы безопасности?
IXN

9
Гораздо более продуктивно применять методы безопасности последовательно и универсально, чем спорить, стоит ли каждый случай. :)
Первый

7
С другой стороны, ресурс, предложенный Кодексом, устанавливает Правило № 3: Доверие WordPress . Похоже, что это не рекомендуется для чрезмерной очистки основных функций wp, например home_url(), если они используются в соответствующем контексте. Согласно этой рекомендации, я бы ожидал home_urlпровести собственную дезинфекцию.
Франко

3

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

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

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

Редактировать:

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


3
«Настройка сайта кем-то, кому вы доверяете» - это буквально ввод пользователя. :)
Первый

@ Во-первых, да, я с тобой, но он был настолько "противен" с помощью esc_url, что я немного прощаю.
Томер W

2

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

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

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


1

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


Все семейство экранирующих функций явно предназначены для дезинфекции.
Первый
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.