我在php中创建了一些函数,但是我遇到了问题
if (isset($_GET['page']) )
{
$open = __DIR__.'/../view/html/'.$_GET['page'].'.php';
if (file_exists($open)){
include $open; //<<<<can i//
}
else {
"echo "The file not found";
}
}
__DIR__
无法正常工作。我不知道如何解决它变得正确。解决方案无法在教程中找到。答案 0 :(得分:0)
你必须这样做。
使用file_get_contents()
if (file_exists($open)){
file_get_contents($open);
}
答案 1 :(得分:0)
您的问题的答案是yes
,这将有效。是否应使用readfile()
,file_get_contents()
或include
取决于文件的内容。如果您在该文件中有php代码,则需要include
或require
。但这实际上带来了另一个问题。
正如@anonymous在评论中所提到的,你正在暴露自己的LFI攻击。要解决此问题,应将页面定义为白名单数组。然后,您应检查该页面是否在白名单数组中。如果不是,请不要尝试打开该文件。
$pages = array(
'page1',
'page2'
);
然后你可以做一个参考并检查它是否存在。
if(in_array($_GET['page'], $pages)){
//now check for the file
$open = __DIR__.'/../view/html/'.$_GET['page'].'.php';
if(file_exists($open)){
include $open;
}
} else {
//page does not exist, redirect them elsewhere.
header('Location: http://example.com/404.php');
}
答案 2 :(得分:0)
我会用:
if( isset( $_GET['page'] ) ) {
switch( strtolower( $_GET['page') ) ) {
case 'download':
include '../download.php';
break;
case 'blog':
include '../blog.php';
break;
// ... And so on
default:
echo 'File not found';
}
} else {
echo 'No file specified';
}
通过这种方式,您可以完全控制可以包含哪些文件!