0

我正在使用:

<?php

$file = $_GET['page']; //ie: http://localhost/?page=index
include "php/{$file}.php";

?>

但我需要知道在$file调用之前修剪变量的最安全方法是什么include

我在想类似的事情:

//-replace '.' with ''
//-replace '/' with ''
//-replace '\' with ''

但我确信有更好的方法,所以我请求你的帮助。我需要它非常安全。

谢谢你。

4

2 回答 2

2

如果您需要非常安全,即使在修剪之后也不要包含它。相反,在您获得的变量和您需要包含的文件之间使用类似字典的关联:

<?php
$file = $_GET['page'];

$allowed_pages = array('index', 'profile', 'legal', 'about');

if (in_array($file, $allowed_pages)) {
    include "php/" . $file . ".php");
} else {
    die("The page " . $file ." does not exist");
}
?>

这样,您将永远不会得到任何意外的包含。

于 2012-10-24T07:00:45.373 回答
1

我想无论你做什么,你都不能相信用户数据。

如果您的可用文件数量有限,您应该将它们组成一个数组并允许它们。

$allowedFiles = array('index','somewhere','elswhere');

if (!in_array($file,$allowedFile))
    exit ('File Not found');
else
    include("php/{$file}.php");

编辑:

另一种方法是扫描您的目录并删除您不想要的文件和目录。

$filesInDir = scandir("./php");
$allowedFiles = array_diff(array(".","..","protected.php"),$filesInDir);

if (!in_array($file.".php",$allowedFile))
    exit ('File Not found');
else
    include("php/{$file}.php");
于 2012-10-24T07:00:17.770 回答