Linux下PHP安全設置
添加時間:2015-7-8 0:24:57
添加:
思海網絡
PHP安全性設置提示:
DocumentRoot: /var/www/
Default Web server: Apache
Default PHP configuration file: /etc/php.ini
Default PHP extensions config directory: /etc/php.d/
Our sample php security config file: /etc/php.d/security.ini (you need to create this file using a text editor)
Operating systems: Ubuntu (the instructions should work with any other Linux distributions such as RHEL / CentOS / Fedora or other Unix like operating systems such as OpenBSD/FreeBSD/HP-UX).
1. 減少PHP內置模塊
為了增強性能和安全性,強烈建議,減少PHP中的模塊。來看看下面這個被執行命令安裝的模塊。
# php –m
你將會得到類似的結果:
[PHP Modules]
apc
bcmath
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imap
json
libxml
mbstring
memcache
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
suhosin
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib
[Zend Modules]
Suhosin
刪除一個模塊,并執行此命令。例如:刪除模塊sqlite3
# rm /etc/php.d/sqlite3.ini
或者
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disableRestrict
2. 使PHP信息泄露最小化
在默認PHP時在HTTP抬頭處會生成一條線介于每個響應中,(比如X-Powered-By: PHP/5.2.10)。而這個在系統信息中為攻擊者創建了一個非常有價值的信息。
HTTP示例:
HTTP/1.1 200 OK
X-Powered-By: PHP/5.2.10
Content-type: text/html; charset=UTF-8
Vary: Accept-Encoding, Cookie
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;
string-contains=wikiLoggedOut;string-contains=wiki_session
Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT
...
因此,我們強烈建議,禁止PHP信息泄露,想要要禁止它,我們要編輯/etc/php.d/secutity.ini,并設置以下指令:
expose_php=Off
3. 使PHP加載模塊最小化
在默認情況下,RHEL加載的所有模塊可以在/etc/php.d/目錄中找到。要禁用或啟用一個特定的模塊,只需要在配置文件/etc/php.d/目錄中中注釋下模塊名稱。而為了優化PHP性能和安全性,當你的應用程序需要時,我們強烈建議建議啟用擴展功能。舉個例子:當禁用GD擴展時,鍵入以下命令:
# cd /etc/php.d/
# mv gd.{ini,disable}
# /etc/init.d/apache2 restart
為了擴展PGP GD模塊,然后鍵入以下命令:
# mv gd.{disable,ini}
# /sbin/service httpd restart
4. 記錄PHP錯誤信息
為了提高系統和Web應用程序的安全,PHP錯誤信息不能被暴露出。要做到這一點,需要編輯/etc/php.d/security.ini 文件,并設置以下指令:
display_errors=Off
為了便于開發者Bug修復,所有PHP的錯誤信息都應該記錄在日志中。
log_errors=On
error_log=/var/log/httpd/php_s_error.log
5. 禁用遠程執行代碼
如果遠程執行代碼,允許PHP代碼從遠程檢索數據功能,如FTP或Web通過PHP來執行構建功能。比如:file_get_contents()。
很多程序員使用這些功能,從遠程通過FTP或是HTTP協議而獲得數據。然而,此法在基于PHP應用程序中會造成一個很大的漏洞。由于大部分程序員在傳遞用戶提供的數據時沒有做到適當的過濾功能,打開安全漏洞并且創建了代碼時注入了漏洞。要解決此問題,需要禁用_url_fopen in /etc/php.d/security.ini,并設置以下命令:
allow_url_fopen=Off
除了這個,我還建議禁用_url_include以提高系統的安全性。
allow_url_include=Off
6. 禁用PHP中的危險函數
PHP中有很多危險的內置功能,如果使用不當,它可能使你的系統崩潰。你可以創建一個PHP內置功能列表通過編輯/etc/php.d/security.ini來禁用它。
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
7. 資源控制
為了提高系統的穩定性,強烈建議設置每個腳本解析請求數據所花費的時間和腳本可能消耗的最大內存量。正確的配置這些參數可以防止PHP任何腳本消耗太多的資源或是內存,從而避免系統不安全或降低安全系數。
# set in seconds
max_execution_time = 30
max_input_time = 30
memory_limit = 40M
8. 限制PHP訪問文件系統
該open_basedir指令指定的目錄是允許PHP訪問使用fopen()等功能。如果任何腳本試圖訪問超出open_basdir定義的路徑文件,PHP將拒絕打開。值得注意的是,你不能使用一個符號鏈接作為一種變通方法。
; Limits the PHP process from accessing files outside
; of specifically designated directories such as /var/www/html/
open_basedir="/var/www/html/"
; ------------------------------------
; Multiple dirs example
; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"
; ------------------------------------
9.限制文件/目錄訪問
進行適當的安全設置:確保Apache作為非root用戶運行,比如www-data或www。對于文件和目錄在基于/var/www/下同樣屬于非root用戶。想要更改所有者,執行以下命令:
# chown -R apache:apache /var/www/
10.編譯保護Apache,PHP和MySQL的配置文件
使用charrt命令編譯保護配置文件
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/
使用charrt命令可以編譯保護PHP文件或者是文件中的/var/www/html的目錄:
# chattr +i /var/www/html/file1.php
# chattr +i /var/www/html/
關鍵字:Linux、PHP、安全設置
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解