2009-12-04 35 views

回答

6

只需在您的脚本检查所请求的页面存在,

// allowed get parameters for product 
$whiteList = array(
    'tvs', 
    'toys', 
); 

$menu = $_GET['products']; 

if (! in_array($menu, $whiteList) { 
    // forward to inde 
} else { 
    // forward to requested page 
} 
+0

甚至不需要白名单,一个简单的'file_exists()'或'is_file()'应该可以做到这一点,尽管它可能取决于你的服务器的设置。 – Duroth 2009-12-04 12:24:17

+0

@Duroth这不是真的,可以解析URI来调用函数或其他任何东西,除了纯粹通过它的完整名称包含文件。 – chelmertz 2009-12-04 17:49:23

0

您正在使用导航喜欢什么样的?

http://www.mywebsite.com?products=book.php

如果不重定向任何人的,我的意思是,如果你不使用类似

http://www.mywebsite.com?products=http://www.myanotherdomain.com

然后,只需检查字符串是否以“http”

开始

可帮助:http://nl2.php.net/manual/en/function.substr.php

例如:

$str = $_GET['products']; 
if (strlen($str) > 4 && if (substr($str, 0, 4) == "http") 
{ 
    echo "You dirty Einstein!! Get out!"; 
    return; 
} 
+0

你还需要检查它是否以ftp,rss,ssl或任何其他协议开头,所以这不是一个真正的解决方案 – 2009-12-04 12:05:08

+0

@adam:我提供了一个示例。只是一个例子... – JCasso 2009-12-04 12:09:15

+1

这是错误的解决方案,唯一安全的方法是检查白名单,而不是根据规则排除。 – 2009-12-04 12:14:26