2010-02-23 57 views
39

我知道在PHP中,它發送X-Powered-By標題具有PHP版本。隱藏PHP的X-Powered-By標題

我也知道通過追加一些校驗和,您可以訪問PHP的學分和一些隨機圖像(more info here)。

我也知道在php.ini中你可以打開expose_php = off

但這裏是我有幾個網站做的,那就是用

header('X-Powered-By: Alex'); 

當我查看了頭,我可以看到,它現在是「亞歷克斯」,而不是PHP版本。我的問題是,這首先發送以前的PHP頭(它達到我header()之前,是它檢測到任何嗅探程序?抑或是之前PHP,「收集」頭文件被髮送回瀏覽器?

順便說一句,這不是通過隱藏的安全性,只是好奇頭在PHP中是如何工作的

+2

爲什麼沒有人建議['header_remove'](http://stackoverflow.com/a/17368552/632951)? – Pacerier 2014-12-11 05:12:14

回答

16

在PHP中,標頭不發送,直到PHP碰到了第一個輸出語句。

這包括之前的任何東西<?php

這也是爲什麼setCookie方法將拋出一個警告,如果你嘗試使用它之後,事情已經輸出:

警告:不能更改頭 信息 - 頭已經 發送(輸出開始 /路徑/到/ PHP/file.php:100) /path/to/php/file.php上線150

注意,所有這適用於如果output buffering是在使用中,作爲輸出不會被髮送到適當的輸出buf fering命令運行。

25

Apache Tips & Tricks: Hide PHP version (X-Powered-By)

UPS ...我們可以看到PHP將其自身的 旗幟:

X-Powered-By: PHP/5.1.2-1+b1… 

讓我們看看我們如何禁用它。在 爲了防止PHP從露出 事實,它安裝在 服務器上,加上其簽名的 Web服務器頭,我們需要在 php.ini中變量expose_php找到並打開它off

默認情況下expose_php設置爲開啓。

在php.ini(根據您的Linux發行 這可以 各個地方出現,像/etc/php.ini中, /etc/php5/apache2/php.ini等) 定位含expose_php On和線將其設爲Off:

expose_php = Off 

進行此更改後PHP不會 再添加它的簽名網頁 服務器頭。這樣做,將 讓您的服務器更安全......它只是防止遠程主機 輕鬆地看到你有PHP安裝在系統上 什麼版本你 運行。

+2

但是這只是建議在php.ini中設置'expose_php = Off',alex在他的文章中已經提到過了。 – Ludwig 2014-08-26 17:09:18

3

標題在被髮送回瀏覽器之前由PHP「收集」,以便您可以覆蓋狀態標題等內容。測試它的方式是去一個命令提示符,然後輸入:

telnet www.yoursite.com 80 
GET /index.php HTTP/1.1 
[ENTER] 
[ENTER] 

而且你會看到,在響應發送的報頭(與你的PHP頁面後替換URL中的index.php域。)

+1

查看HTTP響應頭的更簡單方法是使用'curl -I http:// hostname/path'。 – 2014-05-05 13:42:05

+1

爲什麼使用GET請求而不是HEAD請求? – 2014-07-17 05:34:25

+0

@ kylek,如果是海森蟲。理想情況下,你想要測試兩者。 – Pacerier 2014-12-11 04:56:32

29

如果您不希望它發送X-Powered-By標頭,則可以在您的php.ini中設置expose_php = Off

PHP首先編譯所有內容(包括哪些頭文件具有哪些值),然後啓動輸出,反之亦然。

PHP也有自己的復活節彩蛋檢測,你可以閱讀關於這個話題在這裏:PHP Easter Eggs

+3

雞蛋+1。 – Pacerier 2014-12-11 05:02:35

1

我的問題是,這首先發送以前的PHP頭(它達到我header()之前,是它檢測到任何嗅探程序?抑或是頭「收集」由PHP,被髮送回瀏覽器之前, ?

不,它不會首先在PHP發送先前PHP頭。頭被髮送或不發送(完全,爲一批)。默認情況下,您的headerDocs電話取代了先前的頭部具有相同名稱(除非你指定與第二個參數不同的東西)。

注意:如果PHP不收集頭,它將無法取代頭。

由於它不提前發送,所以不能通過嗅探器程序檢測到。

所以是的,頭文件被PHP收集,併發送「真正的」輸出開始的時刻(HTTP響應正文)。

另請參閱headers_sentDocs

2

要刪除X-Powered-By標題而不訪問php.ini,只需添加一個空標題即可。

<?php header('X-Powered-By:'); ?> 

這將覆蓋默認的X供電-By頭一個空值雖然大多數客戶端和應用像這個頭未發送的。

如前所述,在發送任何輸出之前,必須將其插入到代碼中。

並回答你的問題:

只因爲它被用相同名稱的頭換成你的X供電-By頭將被髮送。所以它不能被'嗅探器'檢測到。

+0

它不會刪除標題,而只是重置其值。 – Pacerier 2014-12-11 04:59:40