0

我有问题。我有这个代码:

$theUrl = $_GET["url"];
include("$theUrl.php");

这将获取 url,例如:http://mywebsite.com/index.php?url=test

但是如果有人输入怎么办:

http://mywebsite.com/index.php?url=http://theirwebsite.com/someEvilscript

如何避免这种情况?我只想执行我服务器上的脚本,而不是来自其他网站的脚本。感谢帮助。

4

3 回答 3

2

处理此问题的一种好方法是定义可以包含的文件的白名单。如果该列表中没有任何内容,则应将其视为邪恶并且永远不会包括在内。

例如 :

<?php
$allowed = array('file1', 'file2', 'file3');

if (in_array($_GET["url"], $allowed)) {
    // You can include
} else {
   // Error message and dont include
}
?>

注意:正如评论中所建议的,允许列表可以通过扫描允许的目录来动态填充。

于 2010-12-10T19:30:17.507 回答
0

你真的不应该有任何看起来像那样的代码。我的意思是真的。你想用这个来达到什么目的?我敢肯定还有另一种没有风险的方法(让我们说一般的丑陋)。

就像 HoLyVieR 建议的那样,将可以包含的内容列入白名单是确保当前代码安全的关键。

于 2010-12-10T19:31:50.900 回答
0

你为什么不在你test.php的网站上创建,并http://mywebsite.com/test.php在链接中使用?这样,test.php如果需要,您可以在(和其他脚本中)包含您的初始化脚本。

于 2010-12-10T19:32:38.273 回答