Робота з орієнтованими на користувача полями в WordPress, такими як inputелементи, textareaелементи або будь-які типи полів, у які користувач може вводити власні значення, є місцем, яке завжди має бути метою очищення.
На щастя, WordPress API надає ряд функцій, які допоможуть у цьому. Залежно від вашого випадку використання вам може знадобитися виконати одну з наведених нижче дій.
І все це добре, але є також способи, за допомогою яких ви можете працювати над дезінфекцією даних за допомогою функцій, наданих PHP.
Звісно, інколи регулярні вирази є правильним шляхом, але іноді ви можете використовувати засоби, вбудовані в мову, легші для розуміння та дотримання.
Пишучи власний код (і переглядаючи інші), я намагаюся пам’ятати про це. Отже, з огляду на це, ось процес, який ви можете використовувати, який може полегшити ваші зусилля під час роботи з URL-адресами в WordPress.
Якщо ви не готові до повного обговорення цього питання, ви можете перейти до заголовка внизу публікації, де описано код і як його використовувати у своїй роботі.
Скажімо, у вас є відкритий inputелемент і ви хочете дозволити користувачеві надати URL-адресу, яка згодом буде відображена на інтерфейсі, можливо, у вигляді посилання, у певній схемі або просто як є.
Можна бути дуже агресивним і просто зробити щось на зразок «Якщо це недійсна URL-адреса, не зберігайте її».
І, щоб було зрозуміло, я не кажу, що дійсна URL-адреса не повертає 404 (оскільки іноді сторінки існують, а через роки – ні). Я вважаю дійсну URL-адресу правильно відформатованою та не містить сторонньої інформації.
Скажімо, для цього простого прикладу ви пропонуєте текстове поле, яке згодом буде збережено в таблиці метаданих публікації. Крім того, ви збираєтеся видалити з URL-адреси все, що є незаконним, і залишити лише те, що створить дійсну URL-адресу.
Для цього я вважаю наступні функції найбільш корисними:
- strip_tags. Видаляйте теги HTML і PHP із рядка.
- смуги косі. Вилучає лапки з рядка.
- filter_var. Фільтрує змінну за допомогою вказаного фільтра.
Останнє звучить трохи заплутано, оскільки воно ґрунтується на ідеї, що ви розумієте, що таке фільтри насправді. У PHP фільтри можна розділити на два випадки використання:
- Перевірка
- санітарна обробка
І вони, по суті, є заздалегідь створеними способами обробки даних таким чином, щоб обробляти дані, щоб визначити, чи є це тип інформації, як правило, рядок або масив, яку ми шукаємо.
Приведення в дію
Маючи це на увазі, ось як можна спробувати зберегти інформацію в базі даних без будь-якої обробки (що погано):
<?php
$data['url'] = 'https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>';
За допомогою наведеного вище коду користувач може буквально ввести будь-що в поле і зберегти це в базі даних. Ось чому санітарна обробка важлива. Без цього користувач може завдати шкоди взаємодії з користувачем або всій установці WordPress.
Отже, як виглядає застосування коду вище під час очищення URL-адрес? У загальному вигляді це виглядає так :
<?php
if (!isset($data['url']) {
return '';
}
$url = $data['url'];
$data['url'] = strip_tags(
stripslashes(
filter_var($url, FILTER_VALIDATE_URL)) );
Спочатку код проходить через фільтр PHP, який перевіряє URL-адресу. Якщо рядок, переданий у функцію фільтра, навіть не працює як URL-адреса, тоді функція поверне false.
Якщо, з іншого боку, він працює як дійсна URL-адреса, тоді ми можемо видалити будь-які непотрібні косі риски. Це означає, що ми можемо «зняти лапки з будь-яких рядків у лапках». Точніше, це видалить першу послідовну зворотну косу риску (оскільки в PHP зворотні косі риски використовуються для екранування зворотної косої риски). ясно? 🙂
Нарешті, ми вирішили видалити теги, оскільки нам потрібна лише сама URL-адреса. Ми не хочемо, щоб будь-яка розмітка, теги або щось, що могло б саботувати дані, які записуються в базу даних. Це означає, що якщо ви вирішите запустити щось на зразок:
https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>
Вам залишиться:
"https://tommcfarlin.com/alert('hello world!');"
Отже, об’єднавши весь наведений вище код, використовуючи цей рядок:
https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>'
Результатом буде такий результат:
https://tommcfarlin.com/alert('hello world!');
Очевидно, що це недійсна URL-адреса, але вона чиста, безпечна та дозволяє вам виконувати будь-яку іншу роботу, яку вам може знадобитися, щоб переконатися, що URL-адреса безпечна для користувача.