我遇到了问题。我有这段代码:
$theUrl = $_GET["url"];
include("$theUrl.php");
这会获取网址,例如:http://mywebsite.com/index.php?url=test
但如果有人投入怎么办?
http://mywebsite.com/index.php?url=http://theirwebsite.com/someEvilscript
如何避免这种情况?我只想要在我的服务器上执行脚本而不是从其他网站执行。谢谢你的帮助。
答案 0 :(得分:2)
处理此问题的一个好方法是定义可以包含的白名单文件。如果该列表中没有任何内容,则应将其视为邪恶且永不包含在内。
例如:
<?php
$allowed = array('file1', 'file2', 'file3');
if (in_array($_GET["url"], $allowed)) {
// You can include
} else {
// Error message and dont include
}
?>
注意:根据评论中的建议,可以通过扫描允许的目录动态填充允许列表。
答案 1 :(得分:0)
你真的不应该有任何类似的代码。我的意思是真的。你想用这个来实现什么?我确信在没有风险的情况下还有另一种方法(并且让我们说一般的丑陋)。
像HoLyVieR建议的那样,将可以包含的内容列入白名单是使当前代码安全的关键。
答案 2 :(得分:0)
为什么不在您的网站上创建test.php
,并在链接中使用http://mywebsite.com/test.php
?这样,您可以在test.php
(以及其他脚本中)中包含初始化脚本(如果需要)。