0

文字列を検証して、URL に対して安全であることを確認するにはどうすればよいですか。gmail の URL を壊す可能性のあるファイル名にスペースや特殊文字を使用しないでください。

例:data/Logo - free.png無効になります

私はただ好きです:"a-z", "0-9", ".", "-", "_"

ここには URL を検証するための何百もの質問がありますが、それらはすべて、必要のない「http」が含まれているかどうかを確認しているようです。

作業コードで更新 (@minitech から):

// validate filename
if (preg_match('/[^\w.-]/', basename($logo))){
    $error = true
}
4

3 に答える 3

4

私は正規表現の大ファンではないので、PHP の内部 filter_var を修正しました。相対 URL に問題があるようです。私はこの回避策を使用します:

function isValid($url)
{
    if (parse_url($url, PHP_URL_SCHEME) != '') {
        // URL has http/https/...
        return !(filter_var($url, FILTER_VALIDATE_URL) === false);
    }else{
        // PHP filter_var does not support relative urls, so we simulate a full URL
        // Feel free to replace example.com with any other URL, it won't matter!
        return !(filter_var('http://www.example.com/'.ltrim($url,'/'), FILTER_VALIDATE_URL) === false);
    }
}

PS: filter_var のセキュリティ上の問題に注意してください: https://d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/

于 2016-06-10T20:18:59.960 に答える
1

あなたがリストしたものからそれを正しく取ってください:

$valid = !preg_match('/[^\w.-]/', $name);

urlencode状況によっては、を使用してエスケープすることを検討することもできます。

于 2012-12-16T16:58:41.977 に答える
0

この正規表現を使用して、有効なファイル名を確認します

 ^.*/[\w.-]+$
于 2012-12-16T16:59:58.137 に答える