我已经作出如下功能的URL的安全性。我只是想知道是否有什么我需要重新考虑或更改下面的代码。在阅读了关于各种来源的安全性的文章之后,我已经完成了这个功能。的URL安全
下面是函数:
// filters possible malacious stuff from URLs
private function filter_url($url)
{
if (is_array($url))
{
foreach($url as $key => $value)
{
// recurssion
$url[$key] = filter_url($value);
}
return $url;
}
else
{
// Allow only one ? in URLs
$total_question_marks = substr_count($url, '?');
if ($total_question_marks >= 2)
{
exit('You can not use 2 question marks (?) in URLs for security reasons!!');
}
// decode URLs
$url = rawurldecode($url);
$url = urldecode($url);
// remove bad stuff
$url = str_replace('../', '', $url);
$url = str_replace('..\\', '', $url);
$url = str_replace('..%5C', '', $url);
$url = str_replace('%00', '', $url);
$url = str_ireplace('http', '', $url);
$url = str_ireplace('https', '', $url);
$url = str_ireplace('ftp', '', $url);
$url = str_ireplace('smb', '', $url);
$url = str_replace('://', '', $url);
$url = str_replace(':\\\\', '', $url);
$url = str_replace(array('<', '>'), array('<', '>'), $url);
// Allow only a-zA-Z0-9_/.-?=&
$url = preg_replace("/[^a-zA-Z0-9_\-\/\.\?=&]+/", "", $url);
//print $url;
return $url;
}
}
我可以简单地使用此功能是这样的:
$_GET = filter_url($_GET);
甚至是这样的:
$_SERVER['QUERY_STRING'] = filter_url($_SERVER['QUERY_STRING']);
你想要保护什么?一个URL本身并不是可以防范的。应用程序如何处理输入是发生可能的入侵的地方,而这个简单的过滤器不会自动保护每个后续层。 – deceze 2009-12-11 09:14:50
基本上我做了一个框架MVC,在它所有的URL都重新路由。 – Sarfraz 2009-12-11 14:34:20