1

我正在使用它来验证 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) &&
            filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_HOST_REQUIRED) !== false);
}
4

1 回答 1

0

文档没有说明这一点,但返回值是经过净化的 URL 副本。

IE

<?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()

于 2017-03-10T12:43:37.787 回答