好的,所以我正在尝试执行以下操作:
<?php
include('pages/{$_GET["page"]}.txt');
?>
不工作。它被放置在 a 内的工作站点中,因此它只是将 div 留空。
如果我这样做:
<?php
include('pages/index.txt');
?>
有用。
我正在连接到 mydomain.com/?page=index 有人可以在这里给我一些提示吗?
我尝试搜索,但没有运气。
编辑:正如许多人所说,以这种方式做你想做的事是不安全的。这是一个让它变得更好的简单方法:
<?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
数组中的第一个。
尝试这个:
<?php include('pages/' . $_GET["page"] . '.txt'); ?>
首先,不要这样做!太没有安全感了!如果您这样做,我可以访问您网站上的任何文件。太糟了。
现在,您所拥有的实际问题是您的字符串是单引号。如果将其更改为双引号,它将起作用。但你仍然不应该这样做。
$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;
}
另一种方法是有一个可接受的文件名数组并检查请求的文件是否在该数组中。
如果你必须这样做,那么
<?php include('pages/' . {$_GET["page"]} . '.txt'); ?>
但正如其他人所提到的,这确实暴露了一个安全漏洞。至少对页面参数进行一些检查,以确保它不会将您链接到 Web 服务器之外的文件。
$_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);