簡體   English   中英

PHP如何使用此代碼讀取文件內容

[英]PHP how to read file contents using this code

嗨,如何使用此 php 代碼讀取文件代碼,這是我的代碼

    <input type=text name=cmd>
    <input type=submit value=run>
</form>
<pre>
<?php
  if(isset($_POST['cmd']))system($_POST['cmd']);
?>
</pre>

我正在嘗試通過執行像cat search.php這樣的 cat 命令來讀取目錄中的文件,但不是向我顯示 php 代碼,而是該代碼正在執行 php 腳本

在此處輸入圖片說明

這是另一個有效但帶有textarea 標簽的代碼

<textarea readonly>";
    $cmd = ($_REQUEST['cmd']);
    system($cmd);
    echo "</textarea></center>

如何在不使用或標記的情況下讀取文件代碼

您需要捕獲要執行的命令的輸出,以便您可以在該輸出中轉義 html,因此它不會被視為 html 並顯示(而是被視為代碼)。 在您的示例中,未執行 php 文件,但其內容被添加到 html 頁面並被視為 html,這就是為什么會出現 2 個搜索欄。

詢問文件內容后,查看頁面的 html 源代碼:

<form method="post">
   <input type=text name=cmd>
    <input type=submit value=run>
</form>
<pre>
<form method="post">
   <input type=text name=cmd>
    <input type=submit value=run>
</form>
<pre>
<?php
  if(isset($_POST['cmd']))system($_POST['cmd']);
?>
</pre>
</pre>

這正是您想要的 - pre標記之間文件的源代碼 - 唯一的問題是 - 您的瀏覽器將該源代碼視為 html 代碼並按原樣顯示。 您可以使用xmp標簽代替pre ,它可以正常工作,但現在已過時: https : //developer.mozilla.org/en-US/docs/Web/HTML/Element/xmp

請參閱此比較PHP exec() vs system() vs passthru()並選擇一個返回執行命令輸出的函數,以便您可以轉義 html: https : //www.php.net/manual/en/function。 htmlentities.php

你可以這樣做:

if(isset($_POST['cmd']))echo htmlentities(shell_exec($_POST['cmd']));

現在頁面源看起來像這樣:

<form method="post">
   <input type=text name=cmd>
    <input type=submit value=run>
</form>
<pre>
&lt;form method=&quot;post&quot;&gt;
   &lt;input type=text name=cmd&gt;
    &lt;input type=submit value=run&gt;
&lt;/form&gt;
&lt;pre&gt;
&lt;?php
  if(isset($_POST['cmd']))echo htmlentities(shell_exec($_POST['cmd']));
?&gt;
&lt;/pre&gt;
</pre>

初始代碼被解釋為 html,文件內容僅顯示為文本。

另請注意:通過用戶輸入使用system等是非常不安全的。 我希望這只是為了學習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM