Чому я повинен використовувати esc_url?


12

Ця річ ускладнює моє кодування. Wordpress codex пояснює використання esc_url, розмовляючи неяскраво про безпеку. Але чи справді варто турбуватися?

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

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

замість

<?php echo home_url() ?>

PS: Я кажу не про розробку тем, а про конкретний сайт.

Відповіді:


12

Якщо ви перевірите документацію щодо перевірки даних, про функцію слід сказати:

Завжди використовуйте esc_url під час дезіннізації URL-адрес (у текстових вузлах, атрибутивних вузлах чи деінде). Відхиляє URL-адреси, які не мають жодного із наданих білих протоколів [...], усуває недійсні символи та видаляє небезпечні символи.

Там у вас є - практична користь для безпеки. Дійсний протокол, без мутних символів.

Відповідь про необхідність твердо - так . Уникнення вихідних даних - це основна практика безпеки.


2
При всій повазі я не бачу, як, наприклад, домашнє посилання може становити загрозу безпеці. Можливо, ці вказівки стосуються створення тем і не застосовуються до "приватного" коду? Зрештою, може бути найкращим чином жорсткий код домашньої адреси та інших посилань у html і взагалі не використовувати php, якщо є ризики безпеки?
IXN

9
Набагато продуктивніше послідовно та універсально застосовувати практику безпеки, ніж дискусії, якщо кожен конкретний випадок того вартий. :)
Рарст

7
З іншого боку, ресурс, запропонований Codex, встановлює правило №3: Довіряйте WordPress . Це, здається, рекомендує проти перенапруження основних функцій wp, як home_url(), якщо вони використовуються у відповідному контексті. Згідно з цією рекомендацією, я б очікував home_urlвиконати власну санітарію.
Франко

3

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

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

це може призвести до викрадення сеансу та вкрадення облікових записів користувачів та інших поганих варіантів.

Редагувати:

У вашому прикладі esc_url( home_url( '/' ) );
він працював на напівтвердому коді! тому esc_urlможна усунути.
Це сказало, що я досі не бачу, чому турбують розмежування між тим, коли є загроза, і коли немає, і загалом пропонується зберегти esc_url () для кожного значення.


3
"Налаштування сайту з боку когось, кому ви довіряєте", це все ще в буквальному сенсі . :)
Рарст

@Rarst так, я з вами, але він був так "огидний", що використовує esc_url, я трохи пробачив.
Томер Ш

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.