Я начал изучать веб-разработку и нашел это:
filter_var('php://', FILTER_VALIDATE_URL);
Но они сказали это:
Недостаток в приведенном выше заключается в том, что в параметрах фильтра нет способа ограничения разрешенной схемы URI, и пользователи ожидают, что это будет один из http, https или mailto, а не какой-то общий специфичный для PHP URI. Это своего рода общий подход к валидации, который мы должны стремиться избегать любой ценой.
Источник : Проверка ввода
Мои вопросы :
Примечание: это мой первый пост, поэтому прошу прощения, если у него много вопросов.
Спасибо.
var_dump(filter_var('testing://123.com', FILTER_VALIDATE_URL));
не ложь Это ваш ответ 🙂 Вы не хотите говорить нормально URL, который не входит в зарегистрированную схему.
Так что этот комментарий по сути означает, что даже если filter_var
будет искать правильный формат URL, он не сможет правильно судить, хороша ли схема URL, и многие плохие URL все еще могут пройти, так как это универсальный тип. Это все равно, что сказать, что номер телефона в США состоит из 10 цифр, да, хорошо, если это единственный чек, тогда 1111111111 также является действительным номером телефона?
Но это не значит, что это бесполезно, вы всегда можете добавить немного больше к своему условию if, чтобы удовлетворить это, чтобы комментарий ни в коем случае не был концом света. Вы можете улучшить эту проверку чем-то вроде
if(filter_var($url, FILTER_VALIDATE_URL) && parse_url($url, PHP_URL_SCHEME)=="http")
Как насчет этого для примера
filter_var('javascript://test%0Aalert(321)', FILTER_VALIDATE_URL) !== false; //true