PHP安全-安全模式

來源:互聯網
上載者:User



安全模式

PHP的safe_mode選項的目的是為瞭解決本章所述的某些問題。但是,在PHP層面上去解決這類問題從架構上來看是不正確的,正如PHP手冊所述(http://www.php.cn/)。

當安全模式生效時,PHP會對正在執行的指令碼所讀取(或所操作)檔案的屬主進行檢查,以保證與該指令碼的屬主是相同的。雖然這樣確實可以防範本章中的很多例子,但它不會影響其它語言編寫的程式。例如,使用Bash寫的CGI指令碼:

 #!/bin/bash   echo "Content-Type: text/plain"  echo ""  cat /home/victim/inc/db.inc


Bash解析器會去關心甚至檢查PHP設定檔中的開啟安全模式的配置字串嗎?當然不會。同樣的,該伺服器支援的其它語言,如Perl,Python等都不會去關心這個。 本章中的所有例子可以很簡單地被改編成其它程式設計語言。

另一個典型的問題是安全模式不會拒絕屬於WEB伺服器檔案的訪問。這是由於一段指令碼可以用於建立另一段指令碼,而新指令碼是屬於WEB伺服器的,因此它可以訪問所有屬於WEB伺服器的檔案:

<?php   $filename = 'file.php';  $script = '<?php   header(\'Content-Type: text/plain\');  readfile($_GET[\'file\']);   ?>';   file_put_contents($filename, $script);   ?>


上面的指令碼建立了下面的檔案:

 <?php   header('Content-Type: text/plain');  readfile($_GET['file']);   ?>


由於該檔案是由Web伺服器所建立的,因此它的屬主是Web伺服器(Apache一般以nobody使用者運行):

 $ ls file.php  -rw-r--r--  1 nobody nobody 72 May 21 12:34file.php


因此,這個指令碼可以繞過很多安全模式所提供的安全措施。即使開啟了安全模式,攻擊者也能顯示一些資訊如儲存在/tmp目錄內的會話資訊,這是由於這些檔案是屬於Web伺服器的(nobody)。

PHP的安全模式確實起到了一些作用,可以認為它是一種深度防範機制。可是,它只提供了可憐的保護,同時在本章中也沒有其它安全措施來替代它。

以上就是PHP安全-安全模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.