http://www.hoge.com/foo/barなど普通のURIはいいのですが、
URIが正しいかのチェックをしようと思い
PHPにて|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i
とか
Zend_Uri::check($url)とかしたのですが、
@とか<>とかセキュリティ的にも\0とか不要であると思われるものをURI内に入れても普通にチェックを通ってしまいます
英数字、エンコードした時の文字とか有り得る文字以外はValidateチェックにて弾きたいと思うのですが、どのような正規表現が書けるものなのでしょうか?
[?&/%_-]*とかホワイトリスト的に書き加えようと思ったのですが、それ以外の有り得る文字列が分かりませんでした
・URI指示にてまず有り得ない文字が入っていたら排除したい
・NULLバイトなどセキュリティ的に問題があるものを排除したい
そもそもNULLバイトの場合は正規表現で省くのではなく、preg_match('/\0/', $uri)などで弾くのかもしれませんが
http://phpspot.net/php/pg%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%EF%BC%9A%E6%AD%A3%E3%81%97%E3%81%84%EF%BC%B5%EF%BC%B2%EF%BC%AC%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E8%AA%BF%E3%81%B9%E3%82%8B.html
こういうの参考になりませんか?