明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

加固PHP環(huán)境(轉(zhuǎn))

[摘要]作者:Albert   PHP作為Apache的模塊運(yùn)行時(shí),Apache本身的安全起主導(dǎo)作用,因此如果配置正確的話,PHP應(yīng)該是一個(gè)十分安全的環(huán)境,但是如果PHP是以CGI方式來運(yùn)行的話,就沒有這么安全了。   本文中提到的操作,對Unix和Windows都適用。   一、作為Apache模塊來運(yùn)...
作者:Albert

  PHP作為Apache的模塊運(yùn)行時(shí),Apache本身的安全起主導(dǎo)作用,因此如果配置正確的話,PHP應(yīng)該是一個(gè)十分安全的環(huán)境,但是如果PHP是以CGI方式來運(yùn)行的話,就沒有這么安全了。

  本文中提到的操作,對Unix和Windows都適用。

  一、作為Apache模塊來運(yùn)行

  因?yàn)橐话阏f來,Apache會以“nobody”或者“www”來運(yùn)行,所以,PHP作為模塊是十分安全的。

  如果PHP在虛擬主機(jī)環(huán)境下,可能會產(chǎn)生用戶能瀏覽其他用戶文件的危險(xiǎn)。一個(gè)簡單的腳本如下:

  
  // 假定文檔根位于 /usr/local/websites/mydomain

  $location = ../; // 到上一級目錄
  $parent = dir($location);

  // 顯示當(dāng)前目錄: /usr/local/websites
  while($entry = $parent->read()) {
  echo $entry .
;
  }
  $parent->close();
  ?>

  這樣,只要修改$location,用戶就可以瀏覽虛擬主機(jī)上所有其他用戶的文件了。為了減少這樣的危險(xiǎn),我們需要看一下php.ini ,修改其中的safe_mode, doc_root和usr_dir 參數(shù),把用戶限制在他自己的虛擬主機(jī)環(huán)境下:

  safe_mode = On
  doc_root = /usr/local/apache/htdocs
  user_dir = /home/albertxu/htdocs

  二、作為CGI

  把PHP以CGI方式運(yùn)行需要十分小心,可能會泄露你不想讓人知道的信息。

  第一件事情要注意的就是一定要把執(zhí)行文件放到文檔根目錄以外的地方。例如/usr/local/bin,因此所有的CGI文件開頭必須帶有:

  #!/usr/local/bin/php

  防止用戶直接調(diào)用CGI的辦法是在Apache中強(qiáng)迫CGI重定向:

  Action php-script /cgi-bin/php.cgi
  AddHandler php-script .php

  這會把下面的URL

  http://example.com/mywebdir/test.htm

  轉(zhuǎn)換為:

  http://example.com/cgi-bin/php/mywebdir/test.htm

  在以CGI方式編譯PHP時(shí),最好采用下面的選項(xiàng):

  --enable-force-cgi-redirect

  本文討論的是有關(guān)PHP的安全問題,詳細(xì)的安全信息可以參考PHP老家上手冊中關(guān)于安全的

  http://www.php.net/manual/en/security.php

  那一章。