Проверка — Какой самый безопасный способ проверки URL в PHP?

Я работаю над фрагментом, и мне нужно было проверить URL-адреса, чтобы я знал, что отправляю данные на правильный URL-адрес, для этого я использую filter_var() функция.

У меня возникли проблемы с этим, когда я начал тестировать, это мой код;

<?php

function post($webLink){

$url = filter_var($webLink, FILTER_SANITIZE_URL);

if (filter_var($url, FILTER_VALIDATE_URL)) {

echo 'Correct';
}

else {

echo 'Please check your url.';
}

}

post('h://www.google.com');
?>

Многие недействительные ссылки проверены как правильные URL-адреса, включая текущий.

Ссылки, которые были проверены, являются;

    ht1tp://www.google.com
h://ww.google.com
http://www.google.
http://www.google.343

Я отказываюсь верить, что эта функция проверяет правильность этих ссылок, я хотел бы думать, что что-то не так в моем if (filter_var($url, FILTER_VALIDATE_URL)) линия.
Мне нужно уточнить, как правильно использовать это, пожалуйста. Спасибо

2

Решение

Во-первых, только подтвердить ввод. Никогда не очищайте входные данные. Не проводите санитарную обработку, пока она не станет готовой к выходу. Это общее правило обработки данных по всем направлениям, и оно так же важно для безопасного отображения URL-адресов, как и для предотвращения XSS-атак, SQL-инъекций и тому подобного.

Во-вторых, FILTER_VALIDATE_URL проверяет URL-адреса на основе RFC 2396. Этот RFC не указывает какой-либо конкретной схемы, хотя он дает несколько примеров (например, HTTP :, GOPHER :, MAILTO: и т. Д.). Руководство по PHP на проверить фильтры прямо заявляет:

Осторожно, допустимый URL-адрес может не указывать HTTP-протокол http: //, поэтому может потребоваться дополнительная проверка, чтобы определить, что URL-адрес использует ожидаемый протокол, например, ssh: // или mailto :.

Кроме того, RFC не определяет структуру доменных имен и не предполагает каких-либо конкретных доменов верхнего уровня. Таким образом, фильтр проверки не проверяет их. Доменные имена формально назначенный регистраторами, следующими правилам ICANN, но вы можете настроить свой собственный локальный DNS-сервер для создания любых записей, которые вы хотите, включая создание записей только для TLD, таким образом любой доменное имя является действителен, проходит ли он фильтр проверки или нет.

Наиболее безопасный способ проверки некоторых четко определенных данных — это внесение их в белый список. Если вы действительно хотите убедиться, что вас никто не пропускает&nbsp; tp: com.google.xssHackHere «, то вам нужно будет выполнить дополнительную проверку самостоятельно. Имейте в виду, что теперь существует несколько сотен допустимых TLD, и не все из них легко выражаются в символах ASCII, если вы хотите проверить доменные имена, а также схема.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]