这是我正在使用的当前代码:
<?php
$blacklist = array("one.jps", "two.txt", "four.html");
$files = array_diff(glob("*.*"), $blacklist);
foreach($files as $file)
echo "<div class='post'><a href='" . $_SERVER['PHP_SELF'] . "?file=" . $file . "'><p>" . $file . "</p></a></div>";
if(!empty($_GET["file"]) && !in_array($_GET["file"], $blacklist) && file_exists($_GET["file"]))
$thesource = htmlentities(file_get_contents($_GET["file"]));
?>
<textarea rows="40" cols="100" placeholder="Source code of file" class="source"><?php if(!empty($thesource))echo $thesource; ?></textarea>
这里发生的是目录中包含的所有文件都被回显:
<a class='okok' href='index.php?file=$file'>$file</a>*
当您单击任何链接时,该文件中的内容将显示在textarea中。这可以很好地工作,但是页面会刷新,并且您将被发送到以下URL:
http://example.com/index.php?file=bob.html *
file = 永远不会是bob.html,这取决于您点击的链接。
这意味着用户只需编辑网址并更改“bob.html”即可。类似于&#39; index.php&#39;因此可以访问所有PHP代码。
我如何重写此代码以使URL不受影响 - 我相信我应该使用会话但我该怎么做
答案 0 :(得分:0)
您可以在if语句中添加其他条件。我们需要从url获取文件名并检查它是否以“php”结尾。下面应该做的伎俩
//checking file type by exploding the variable
$fileType = end(explode(".", $_GET["file"]));
if( $fileType != "php" && !empty($_GET["file"]) && !in_array($_GET["file"], $blacklist) && file_exists($_GET["file"])) {