解析php安全性問題中的:Null 字元問題_PHP教程

來源:互聯網
上載者:User
由於 PHP 的檔案系統操作是基於 C 語言的函數的,所以它可能會以您意想不到的方式處理 Null 字元。 Null字元在 C 語言中用於標識字串結束,一個完整的字串是從其開頭到遇見 Null 字元為止。 以下代碼示範了類似的攻擊:
Example #1 會被 Null 字元問題攻擊的代碼
複製代碼 代碼如下:
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
// file_exists will return true as the file /home/wwwrun/../../etc/passwd exists
include '/home/wwwrun/'.$file.'.php';
// the file /etc/passwd will be included
}
?>

因此,任何用於操作檔案系統的字串(譯註:特別是程式外部輸入的字串)都必須經過適當的檢查。以下是上述例子的改進版本:
Example #2 驗證輸入的正確做法
複製代碼 代碼如下:
$file = $_GET['file'];
// 對字串進行白名單檢查
switch ($file) {
case 'main':
case 'foo':
case 'bar':
include '/home/wwwrun/include/'.$file.'.php';
break;
default:
include '/home/wwwrun/include/main.php';
}
?>

一個函數錯誤就可能暴露系統正在使用的資料庫,或者為攻擊者提供有關網頁、程式或設計方面的有用資訊。攻擊者往往會順藤摸瓜地找到開放的資料庫連接埠,以及頁面上某些 bug 或弱點等。比如說,攻擊者可以一些不正常的資料使程式出錯,來探測指令碼中認證的順序(通過錯誤提示的行號數字)以及指令碼中其它位置可能泄露的資訊。

一個檔案系統或者 PHP 的錯誤就會暴露 web伺服器具有什麼許可權,以及檔案在伺服器上的組織圖。開發人員自己寫的錯誤碼會加劇此問題,導致泄漏了原本隱藏的資訊。

有三個常用的辦法處理這些問題。第一個是徹底地檢查所有函數,並嘗試彌補大多數錯誤。第二個是對線上系統徹底關閉錯誤報表。第三個是使用 PHP 自訂的錯誤處理函數建立自己的錯誤處理機制。根據不同的安全性原則,三種方法可能都適用。

http://www.bkjia.com/PHPjc/327765.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327765.htmlTechArticle由於 PHP 的檔案系統操作是基於 C 語言的函數的,所以它可能會以您意想不到的方式處理 Null 字元。 Null字元在 C 語言中用於標識字串結束...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.