好吧,我正在努力做到以下几点:
<?php
include('pages/{$_GET["page"]}.txt');
?>
哪个不起作用。它被放置在一个工作站点内,所以它只是将div留空。
如果我这样做:
<?php
include('pages/index.txt');
?>
它有效。
我正在连接到mydomain.com/?page=index 谁能在这里给我一些提示?
我试过搜索,但没有运气。
答案 0 :(得分:2)
编辑:正如许多人所说,以这种方式做你想做的事是不安全的。 这是让它变得更好的简单方法:
<?php
$valid_pages = array('index', 'contact', 'faq');
$page = $_GET["page"];
if (!in_array($page, $valid_pages)) {
$page = $valid_pages[0];
}
include("pages/{$page}.txt");
?>
这将检查用户想要的页面是否在允许的页面内,如果没有,它将使用$valid_pages
数组中的第一个。
答案 1 :(得分:0)
试试这个:
<?php include('pages/' . $_GET["page"] . '.txt'); ?>
答案 2 :(得分:0)
首先,不要这样做!这太不安全了!如果您这样做,我可以访问您网站上的任何文件。太糟糕了。
现在,你所拥有的实际问题是你的字符串是单引号。如果你把它改为双引号,那就行了。但是你仍然不应该这样做。
$foo = "QQQ";
echo "asfd{$foo}asdf";
> asfdQQQasdf
echo 'asfd{$foo}asdf';
> asdf{$foo}asdf
修复漏洞的一种方法是拥有一个白名单。这是一个简单的例子:
$file = "foo";
switch ($file) {
case "foo":
include ("pages/foo.txt");
break;
case "bar":
include ("pages/bar.php");
break;
default:
echo "YOU CANNOT ACCESS THIS FILE!";
break;
}
另一种方法是拥有一个可接受的文件名数组,并检查所请求的文件是否在该数组中。
答案 3 :(得分:0)
如果你必须这样做,那么
<?php include('pages/' . {$_GET["page"]} . '.txt'); ?>
但正如其他人所提到的,这确实暴露了一个安全漏洞。至少要对页面参数进行一些检查,以确保它不会将您链接到Web服务器之外的文件。
答案 4 :(得分:0)
$_GET['page'] = "index";
$allowed_page = array("index", "about", "contact");
$page = htmlentities($_GET['page']);
if((isset($_GET['page']) && $_GET['page'] != "") && in_array($page, $allowed_page)){
$page = $_GET['page'];
}
$final_page = 'pages/' . $_GET["page"].'.txt';
include($final_page);