PHP開放源碼和跨越平台,PHP可以運行在WINDOWS和多種版本的LINUX上。它不需要任何預先處理而快速反饋結果,它也不需要mod_perl的調整來使您的服務器的內存映象減小。PHP消耗的資源較少,當PHP作為ApacheWeb服務器一部分時,運行代碼不需要調用外部二進制程序,服務器不需要承擔任何額外的負擔。
關於PHP $_SERVER的一些使用方式
$_SERVER['HTTP_ACCEPT_LANGUAGE']//瀏覽器語言
$_SERVER['REMOTE_ADDR'] //當前用戶 IP 。
$_SERVER['REMOTE_HOST'] //當前用戶主機名
$_SERVER['REQUEST_URI'] //URL
$_SERVER['REMOTE_PORT'] //端口。
$_SERVER['SERVER_NAME'] //服務器主機的名稱。
$_SERVER['PHP_SELF']//正在執行腳本的文件名
$_SERVER['argv'] //傳遞給該腳本的參數。
$_SERVER['argc'] //傳遞給程序的命令行參數的個數。
$_SERVER['GATEWAY_INTERFACE']//CGI 規范的版本。
$_SERVER['SERVER_SOFTWARE'] //服務器標識的字串
$_SERVER['SERVER_PROTOCOL'] //請求頁面時通信協議的名稱和版本
$_SERVER['REQUEST_METHOD']//訪問頁面時的請求方法
$_SERVER['QUERY_STRING'] //查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] //當前運行腳本所在的文檔根目錄
$_SERVER['HTTP_ACCEPT'] //當前請求的 Accept: 頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] //當前請求的 Accept-Charset: 頭部的內容。
$_SERVER['HTTP_ACCEPT_ENCODING'] //當前請求的 Accept-Encoding: 頭部的內容
$_SERVER['HTTP_CONNECTION'] //當前請求的 Connection: 頭部的內容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] //當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] //鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] //當前請求的 User_Agent: 頭部的內容。
$_SERVER['HTTPS']//如果通過https訪問,則被設為一個非空的值(on),否則返回off
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED'] #當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型
- 舉個兩小例子
兩種PHP獲取服務器端IP地址的方法
if('/'==DIRECTORY_SEPARATOR){
$server_ip=$_SERVER['SERVER_ADDR'];
}else{
$server_ip=@gethostbyname($_SERVER['SERVER_NAME']);
}
echo $server_ip;
/**
* 獲取服務器端IP地址
* @return string
*/
function get_server_ip(){
if(isset($_SERVER)){
if($_SERVER['SERVER_ADDR']){
$server_ip=$_SERVER['SERVER_ADDR'];
}else{
$server_ip=$_SERVER['LOCAL_ADDR'];
}
}else{
$server_ip = getenv('SERVER_ADDR');
}
return $server_ip;
}
echo get_server_ip();
為什么要使用phpinfo呢?
這一部分非常非常重要
-
PHP中提供了PHPInfo()函數,該函數返回 PHP 的所有信息,包括了 PHP 的編譯選項及擴充配置、PHP 版本、服務器信息及環境變量、PHP 環境變量、操作系統版本信息、路徑及環境變量配置、HTTP 標頭、及版權宣告等信息。
-
PHPInfo()函數主要用於網站建設過程中測試搭建的PHP環境是否正確,很多網站在測試完畢后並沒有及時刪除,因此當訪問這些測試頁面時,會輸出服務器的關鍵信息,這些信息的泄露將導致服務器被滲透的風險
下面我們重點學習一下:
(1)語法:int phpinfo(void);
他的返回值是一個整數
(2)使用方式:列如新建一個.php文件vi test.php
輸入:<?php phpinfo(); ?>
來看一下泄漏了哪些比較敏感的信息。
1.++絕對路徑(_SERVER[“script_FILENAME”])++
找到phpinfo()頁面可以直接找到網站的絕對路徑,對於寫shell和信息搜集是必不可少的。
ep1:(PHP $_SERVER['SCRIPT_FILENAME'] 與 FILE)
<?php
echo 'SCRIPT_FILENAME 為:',$_SERVER['SCRIPT_FILENAME'];
echo '<br />';
echo '__FILE__ 為:',__FILE__;
?>
上述測試代碼拷貝至 test.php 並訪問該文件(http://localhost/test.php),得到如下結果:
SCRIPT_FILENAME 為:E:/web/html/php/test.php
__FILE__ 為:E:\web\html\php\test.php
2.++支持的程序++
可以通過phpinfo()
查看一些特殊的程序服務,在沒有思路的情況下,可以着重找一下ssrf
3.++泄漏真實ip(_SERVER[“SERVER_ADDR”]或SERVER_ADDR)++
4.++泄漏緩存文件地址(_FILES[“file1”])++
向phpinfo() post一個shell可以在_FILES[“file1”]中看到上傳的臨時文件,如果有個lfi,便可以直接getshell了。
5.++一些敏感配置++
allow_url_include、allow_url_fopen、disable_functions、open_basedir、short_open_tag等等。
比如allow_url_include可用來遠程文件包含、disable_functions用來查看禁用函數,繞過執行、查看是否開啟open_basedir,用p牛的繞過open_basedir的方法有可能能讀一些沒權限的目錄等等。
我們簡單用圖片說明一下
-
我們可以看到PHP的版本
-
加載的php.ini文件,我們是可以看到該文件的路徑的
-
還有就是php的zend(一般用於加密/提高性能)的版本和zend optimizers(一個為加速php腳本的執行,第二為給用zend加密的文件解密)的版本
PS:如果php的腳本沒有經過加密,那么zend optimizer可以不用安裝!論壇文件目錄中的api里面的一些文件是經過加密的,
supesite( SupeSite可以實現對站內的論壇(Discuz!)、個人空間(X-Space)信息進行內容聚合。任何站長,都可以通過SupeSite,輕松構建一個面向Web2.0的社區門戶。)的主程序的文件也是經過加密的,所以對於論壇來說,如果你想使用支付寶,奇虎搜索什么的,就必須安裝zend optimizers,如果你想要安裝supesite,必須得安裝好zend optimizer!關於zend optimizer的加速功能,一般可以讓php的執行速度提高到30%左右!
所以如果是獨立主機用戶,最好是將zend optimizer安裝上,這樣不僅可以起到加速的作用,而且可以使你的空間完全
支持論壇和supesite!
PS:
簡單介紹一下安裝過程
下載安裝包后,直接雙擊安裝即可,安裝過程要你選擇 Web Server 時,選擇 Apache 2.x ,然后提示你是否 Restart Web Server,選擇是,完成安裝之前提示是否備份 php.ini ,點確定后安裝完成。
Zend Optimizer 的加密作用
我們自己寫一個php文件,里面就1行代碼
<?php phpinfo(); ?>
把它保存為phpinfo.php,上傳到服務器上,然后訪問這個 PHP 文件。
如果看到里面有 Zend Optimizer 的版本信息。就說明服務器上支持 Zend Optimizer。版本信息一般是這樣的:
with Zend Optimizer v版本號, Copyright (c) 1998-2007, by Zend Technologies
只要包含有 with Zend Optimizer,說明服務器支持 Zend Optimizer
-
上面指出zend的內核版本,下面指出zend optimizers版本,要使用我們的SupeSite產品,必須還得安裝后者。當然zend optimizers安裝時候,在頁面里還有專門有一個zend optimizers模塊,見圖5
-
加載的模塊
phpinfo會列出你的系統的php加載了哪些模塊,然后下面介紹幾個比較重要的模塊,第一個是gd庫模塊,很多用戶不知道他的空間或者系統是否支持gd庫,所以不確定是否可以用水印和縮略圖功能,在phpinfo頁面,同樣可以展示gd庫的信息,包括版本,freetype庫,gif支持,jpg支持,png支持等等,這些都是很有用的信息,比如支持水印圖片為gif的,那你的gd庫就有得gig支持。如圖所示:
-
mysql模塊
第二個重要的就是mysql模塊。很多用戶認為只要成功安裝mysql,他就可以安裝Discuz!論壇了,其實這
是一個誤區,因為你沒有確認你的php是否加載上了mysql支持。phpinfo就可以很好的檢驗到。如果你的
phpinfo頁面沒有列出mysql模塊擴展,那說明你的環境沒有配置好 -
擴展模塊
php的其他擴展模塊吧,比如mbstring,是支持寬字符集;ftp,這是支持Discuz!論壇后台的ftp附件,還有就是socket,這個是有些安裝了supesite播客的用戶支持影音上傳的;ming,是支持Discuz!后台的Flash 驗證碼的。
phpinfo實在是一個很好的檢驗php環境的工具,大家如果遇到問題,不妨按照我們上面的,看看是不是哪些模塊沒加載上,如果訪問phpinfo頁面的時候變成了下載,那是你的php本身就沒安好