我已經作出如下功能的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