Expose PHP on:說白了就是把 PHP 的內部信息(如 PHP 版本,服務器路徑,文件名等)暴露出來,這樣會對網站的安全性造成威脅,因為攻擊者可以根據這些信息開展攻擊。這種暴露可能是因為某些 PHP 配置的問題,也可能是由于代碼中 debug信息的問題。那么,如何避免這種暴露呢?
首先,為了防止 PHP 內部信息被暴露,我們可以使用 php.ini 文件中的 display_errors 這個指令。開啟這個指令后,PHP 會將錯誤信息輸出到頁面上,比如包含 PHP 版本、路徑等,但這些錯誤信息將不再被輸出到服務器的錯誤日志當中。
display_errors = off
另外,如果想要屏蔽 PHP 內部信息輸出到頁面上,可以將 php.ini 中的 expose_php 設為 off。這樣會把 PHP 版本信息等隱藏掉,增強了網站的安全性。
expose_php = off
在編寫代碼的時候,要盡可能減少 debug 信息的輸出,ESPECIALLY路徑信息。系統路徑的泄漏在攻擊者發起攻擊時會為他們提供很大的幫助。同時,要注意將調試代碼從線上代碼中刪除,否則這些代碼會使攻擊者更加容易地竊取敏感數據。
此外,在使用 Apache 或者 Nginx 之類的 Web 服務器時,要注意一些配置上的問題。Apache 默認輸出其自身版本信息,如下所示:
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
如果我們想屏蔽這些輸出,可以通過在 Apache 的 httpd.conf 中加入以下指令實現:
ServerTokens Prod ServerSignature Off
最后提醒一下,在搭建本地服務器時,許多人一開始只是把服務器連到了公用網絡上,這樣非常容易遭受攻擊,建議還是使用本地環境測試。
總的來說,為了提升網站的安全性,我們需要盡可能減少 PHP 內部信息的暴露。在 php.ini 文件中,關閉 display_errors 和 expose_php 指令即可。在編寫代碼時,要盡可能避免路徑的泄露,并刪除調試代碼。在 Web 服務器的配置中,要注意將服務器版本信息等的輸出屏蔽。最后,一定要在本地環境完成開發。