好的,我要做的是:
<?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'); ?>
如果你必须这样做,那么
<?php include('pages/' . {$_GET["page"]} . '.txt'); ?>
但是正如其他人提到的,这确实暴露了一个安全漏洞。至少在page参数上做一些检查,以确保它不会将你链接到web服务器之外的文件。
首先,不要这样做!太没有安全感了!如果你这样做,我可以访问你网站上的任何文件。那么糟糕。
现在,实际的问题是你的字符串在单引号中。如果你把它改成双引号,就可以了。但是你还是不应该这样做。
$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;
}
$_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);