2

提供されたURLが有効かどうかを確認するためのphpでの最良の方法は何でしょうか...最初に試したのは次のとおりです。

filter_var($url, FILTER_VALIDATE_URL) === false

ただし、受け入れませんwww.example.com(プロトコルなし)。だから私は簡単な変更を試みました:

protected function checkReferrerUrl($url) {
    if(strpos($url, '://') == false) {
        $url = "http://".$url;
    }
    if(filter_var($url, FILTER_VALIDATE_URL) === false) {
        return false;
    }
    return true;
}

で問題なく動作するようになりましたが、 に変換されるのでwww.example.com単純なものも受け入れます。ただし、これは有効なパブリック URL ではないと思いますが...では、何を提案しますか? 従来の正規表現に戻りますか?foohttp://foo

4

2 に答える 2

3

type URL で filter_var を使用しないことをお勧めします。副作用の方がはるかに多いです。たとえば、これらは filter_var による有効な URL です。

http://example.com/"><script>alert(document.cookie)</script>
http://example.ee/sdsf"f

さらに、FILTER_VALIDATE_URL は国際化ドメイン名 (IDN) をサポートしていません。

セキュリティ上の理由から、後でいくつかの if (ドメインの場合は fe) と組み合わせて正規表現を使用することをお勧めします。セキュリティの側面がなければ、私は parse_url を使用して自分の役割を果たしています。ただし、スキーム (http/https なし) が欠落している場合、この関数には同様の問題があります。

于 2015-08-20T08:31:02.013 に答える