#php #security #validation #filter-var
#php #Безопасность #проверка #filter-var
Вопрос:
Я использую это для проверки URL-адресов:
if(!filter_var($website, FILTER_VALIDATE_URL)) {
// invalid url
} else
//url valid
Это безопасно?
После прочтения этого: http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea / Боюсь, что нет.
Так безопасно ли предоставляемое решение?:
function validate_url($url)
{
$url = trim($url);
return ((strpos($url, "http://") === 0 || strpos($url, "https://") === 0) amp;amp;
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_HOST_REQUIRED) !== false);
}
Комментарии:
1. Такие вещи, как межсайтовый скриптинг, SQL injetcion (хотя я использую PDO) и т.д.
Ответ №1:
В документации это не указано, но возвращаемое значение представляет собой исправленную копию URL-адреса.
Т.е.
<?php
echo filter_var('http://example.com/exploit.html?<script>alert(1);</script>', FILTER_VALIDATE_URL);
//http://example.com/exploit.html?
Поэтому, если вы работаете с возвращаемым значением filter_var()
, вы безопаснее, чем работать с URL, предоставленным filter_var()
.