我正在过滤$ _SERVER ["REQUEST_URI"],以便:
$_request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
Run Code Online (Sandbox Code Playgroud)
正如php.net中所解释的:
FILTER_SANITIZE_URL
删除除字母,数字和$ -_之外的所有字符.+!*'(),{} |\^〜[]`<>#%"; /?:@&=.
然而,
浏览器发送此REQUEST_URI值urlencode'd,因此在此filter_input()函数中未对其进行清理.说地址是
然后是已清理的请求网址
/abc/index.php?q=abc%EF%BF%BD%EF%BF%BD123
但它应该是
/abc/index.php?q=abc123
有可能urldecode($ _ SERVER ["REQUEST_URI"])然后使用filter_var()我们可以获得一个已清理的值.
$_request_uri = filter_var(urldecode($_SERVER['REQUEST_URI']), FILTER_SANITIZE_URL);
Run Code Online (Sandbox Code Playgroud)
我不知道为什么最后一个在我看来"不优雅"而且我正在寻找一种优雅的方式,消毒$ _SERVER ["REQUEST_URI"].
也许,在编码时直接访问超级全局数组($ _SERVER ['REQUEST_URI'])会让我感到不安,因此"不优雅".
有优雅的方式吗?
php filtering global-variables input-sanitization request-uri