PHP:FILTER_VALIDATE_URL可以安全地验证URL吗?

时间:2014-06-18 14:46:47

标签: php security validation filter-var

我用它来验证网址:

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);
}

1 个答案:

答案 0 :(得分:0)

文档没有说明这一点,但返回值是URL的清理副本。

<?php
echo filter_var('http://example.com/exploit.html?<script>alert(1);</script>', FILTER_VALIDATE_URL);
//http://example.com/exploit.html?

因此,如果您使用filter_var()的返回值,则比使用提供给filter_var()的网址更安全。