CentOS + Apache + PHP 是我常用來建置web系統的環境

php也是最常見的、用來寫web應用程式的程式,所以它的安全性也是需要注意一下

我參考了 http://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html 的文章,也整理了一下

一般php的環境設定是靠 ↓

/etc/php.ini : php 主要設定檔
/etc/php.d   : php 用來放額外的模組的地方,都是 XX.ini

我們查看 php 版本可以下 php -v

而查現在php 支援那些模組可下 php -m

以上也可以透過 web 瀏覽 phpinfo.php (內容是 <?php phpinfo()?> ,就可以看到更詳細資訊

當然如果不用的模組也最好關閉,一方面增加效能、一方面也為了安全性 (1。移除 XX.ini 、2。重編php,只enable需要的)

將 expose_php 設成 off 關閉 HTTP 表頭會顯示 X-Powered-By: PHP/4.3.9d   (curl -I http://ssorc.tw)

當然 apache 也最好關閉版本顯示

關閉錯誤訊息的顯示,display_errors=off

如果要允許檔案上傳 (file_uploads=on),最好限制大小(upload_max_filesize=1M)

allow_url_fopen=off 也最好關閉,因為如果程式沒過濾好,很容易被用來作惡意的連結

至於safe_mode我暫時不管它了,一方面php5.3以後的版本不再支援了

magic_quotes_gpc=Off ,可以參考 http://ssorc.tw/?p=1026

控制POST的大小,post_max_size=1k,可以防止被POST大檔造成主機資源被吃光而掛掉

資源的控還有
max_execution_time =  30
max_input_time = 30
memory_limit = 40M

用外掛(Suhosin)來保護php底層 : 它用來保護 php 應用程式已知或未知的缺陷

取消function,它的建議是

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

大部份是讓php無法作系統指令

我用了以下測試很多站台,基本上沒有什麼大問題

disable_functions = "exec,passthru,proc_open,shell_exec,system,popen,dl"

使用fastcgi : 比 mod_php 有效率,且使用者權限可以是 User,改善一定要用 apache user 的缺點

用open_basedir限制php固定存取某個目錄

open_basedir = "/var/www/html/DOMAIN.com:/tmp/DOMAIN.com"

session.save_path

session.save_path = "/tmp/DOMAIN.COM"

要常更新 php , OS

作好檔案、目錄的權限控管,比方說只讓apache這個user可以讀

使用mod_security搭配

使用 chroot

固定時間查看 log記錄,觀查是否有異狀

分散service,web一台 server、db一台 server

工具 — https://phpids.org/ (未研究) — 網站型式的入侵偵測系統

工具 — http://phpsec.org/projects/phpsecinfo/index.html (未研究) — 提供安全性的建議

查有沒有c99等這類的惡意程式是否在網站裡面

# grep -iR ‘c99’ /var/www/html/
# grep -iR ‘r57’ /var/www/html/
# find /var/www/html/ -name *.php -type f -print0 | xargs -0 grep c99
# grep -RPn “(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)” /var/www/html/

其它參考: http://www.rfxn.com/projects/linux-malware-detect/

最後修改日期: 2014 年 10 月 20 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。