如何使用Sessions-PHP回显文件的内容?

时间:2015-02-10 18:27:28

标签: php jquery ajax

这是我正在使用的当前代码:

<?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>*
  • 其中$ file是正在回显的文件的名称。

当您单击任何链接时,该文件中的内容将显示在textarea中。这可以很好地工作,但是页面会刷新,并且您将被发送到以下URL:

http://example.com/index.php?file=bob.html *

file = 永远不会是bob.html,这取决于您点击的链接。

这意味着用户只需编辑网址并更改“bob.html”即可。类似于&#39; index.php&#39;因此可以访问所有PHP代码。

我如何重写此代码以使URL不受影响 - 我相信我应该使用会话但我该怎么做

1 个答案:

答案 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"])) {