apache web 伺服器提供了這種便利 :通過 http 或 https 協議,訪問文
件和內容。配置不當的伺服器端指令碼語言會帶來各種各樣的問題。所以,
使用 php 時要小心。以下是 25 個 php 安全方面的最佳實踐,可供系統管理
員們安全地配置 php。
為 php 安全提示而提供的示例環境
◆檔案根目錄(documentroot):/var/www/html
◆ 默 認 的 web 服 務 器 :apache(可 以 使 用 lighttpd 或 nginx 來 取 代
apache)
◆預設的 php 配置檔案 :/etc/php.ini
◆預設的 php 載入模組配置目錄 :/etc/php.d/
◆我們的示例 php 安全配置檔案 :/etc/php.d/security.ini(需要使用文
本編輯器來建立該檔案)
◆ 操 作 系 統 :rhel/centos/fedora linux(相 關 指 令 應 該 與 debian/
ubuntu 等其他任何 linux 發行版或者 openbsd/freebsd/hp-ux 等其他類
似 unix 的作業系統相容)。
◆預設的 php 伺服器 tcp/udp 埠 :無
將所有php錯誤記入日誌
別讓 php 錯誤資訊暴露在**的所有訪客面前。編輯 /etc/php.d/
security.ini,執行以下指令 :
display_errors=off
確保你將所有 php 錯誤記入到日誌檔案中 :
不允許上傳檔案
出於安全原因,編輯 /etc/php.d/security.ini,執行以下命令 :
file_uploads=off
如果使用你應用程式的使用者需要上傳檔案,只要設定 upload_max_
filesize,即可啟用該功能,該設定限制了 php 允許通過上傳的檔案的最大
值 :file_uploads=on
# 使用者通過 php 上傳的檔案最大 1mb
upload_max_filesize=1m
關閉遠端**執行
如 果 啟 用,allow_url_fopen 允 許 php 的 文 件 函 數 —— 如 file_get_
contents()、include 語句和 require 語句——可以從遠端地方(如 ftp 或**)
獲取資料。
allow_url_fopen 選項允許 php 的檔案函式——如 file_get_contents()、
include 語句和 require 語句——可以使用 ftp 或 http 協議,從遠端地方
獲取資料。程式設計員們常常忘了這一點,將使用者提供的資料傳送給這些函式
時,沒有進行適當的輸入過濾,因而給**注入安全漏洞留下了隱患。基於
php 的 web 應用程式中存在的眾多**注入安全漏洞是由啟用 allow_url_
fopen 和糟糕的輸入過濾共同引起的。編輯 /etc/php.d/security.ini,執行
以下指令 :
allow_url_fopen=off
出於安全原因,我還建議禁用 allow_url_include :
allow_url_include=off
啟用sql安全模式
編輯 /etc/php.d/security.ini,執行以下指令 :
sql.safe_mode=on
如果啟用,mysql_connect() 和 mysql_pconnect() 就忽視傳送給它們的
任何變數。請注意 :你可能得對自己的**作一些更改。sql.safe_mode 啟
用後,第三方開源應用程式(如 workdpress)及其他應用程式可能根本執行
不了。我還建議你針對所有安裝的 php 5.3.x 關閉 magic_quotes_gpc,因
為它的過濾並不有效、不是很可靠。mysql_escape_string() 和自定義過濾
函式能起到更好的作用 :
magic_quotes_gpc=off
控制post請求的大小
作為請求的一部分,客戶機(瀏覽器或使用者)需要將資料傳送到 apache
web 伺服器時,比如上傳檔案或提交填好的表單時,就要用到 http post
請求方法。攻擊者可能會企圖傳送過大的 post 請求,大量消耗你的系統
資源。你可以限制 php 將處理的 post 請求的最大大小。編輯 /etc/php.
d/security.ini,執行以下命令 :
; 在此設定實際可行的值
post_max_size=1k
1k 設定了 php 應用程式允許的 post 請求資料的最大大小。該設定還
影響檔案上傳。要上傳大容量檔案,這個值必須大於 upload_max_filesize。
我還建議你限制使用 apache web 伺服器的可用方法。編輯 httpd.conf,執
行針對檔案根目錄 /var/www/html 的以下指令 :
order allow,deny
## 可在此新增配置的其餘部分 ... ##
資源控制(拒絕服務控制)
你可以設定每個 php 指令碼的最長執行時間,以秒為單位。另乙個建議的
選項是設定每個指令碼可能用於解析請求資料的最長時間,以及指令碼可能耗
用的最大記憶體數量。編輯 /etc/php.d/security.ini,執行以下命令 :
# 設定,以秒為單位
max_execution_time = 30
max_input_time = 30
memory_limit = 40m
為php安裝suhosin高階保護系統
suhosin 是一款高階的保護系統,面向安裝的 php。它旨在保護伺服器和
使用者,遠離 php 應用程式和 php 核心中的已知缺陷和未知缺陷。suhosin 分
兩個獨立部分,可以單獨使用,也可以組合使用。第乙個部分是針對 php 核
心的小補丁,實施了幾個低階防護措施,以防範緩衝器溢位或格式字串安
全漏洞 ;第二個部分是功能強大的 php 載入模組,實施了其他所有的保護措
施。保持php、軟體和作業系統版本最新
打安全補丁是維護linux、apache、php和mysql伺服器的乙個重要環節。
應該使用以下其中任何乙個工具(如果你通過軟體包管理器來安裝 php),
盡快檢查所有的 php 安全更新版本,並盡快打上 :
# yum update 或
# apt-get update && apt-get upgrade
你可以配置紅帽 /centos/fedora linux,以便通過電子郵件傳送 yum 軟
件包更新通知。另乙個選項是通過 cron job(計畫任務)打上所有的安全
更新版。在 debian/ubuntu linux 下,可以使用 apticron 來傳送安全通知。
注 :經常訪問 php.net,尋找源**安裝的最新版本。
限制檔案和目錄訪問
確保你以 apache 或 www 等非根使用者的身份來執行 apache。所有檔案
和目錄都應該歸非根使用者(或 apache 使用者)所有,放在 /var/www/html 下 :
# chown -r apache:apache /var/www/html/
/var/www/html/ 是個子目錄,這是其他使用者可以修改的檔案根目錄,
因為根目錄從來不在那裡執行任何檔案,也不會在那裡建立檔案。
確保在 /var/www/html/ 下,檔案許可權設成了 0444(唯讀):
# chmod -r 0444 /var/www/html/
確保在 /var/www/html/ 下,所有目錄許可權設成了 0445 :
# find /var/www/html/ -type d -print0 | xargs -0 -i {} chmod 0445 {}
關於設定合適檔案許可權的補充
chown 和 chmod 命令確保 :不管在什麼情況下,檔案根目錄或檔案根目
錄裡面的檔案都可以被 web 伺服器使用者 apache 寫入。請注意 :你需要設
置對你**的開發模型最合理的許可權,所以可以根據自身需要,隨意調整
chown 和 chmod 命令。在這個示例中,apache 伺服器以 apache 使用者的身
份來執行。這可以在你的 httpd.conf 檔案中用 user 和 group 命令來配置。
apache 使用者需要對檔案根目錄下的所有內容享有讀取訪問權,但是不應該
享有寫入訪問權。
確保 httpd.conf 有以下命令,實現限制性配置 :
options none
allowoverride none
order allow,deny
由於篇幅所限,本文僅節選了 25 條最佳實踐當中的 9 條。完整內容見
原文 :
25 php security best practices for sys admins
譯文 :
4 1系統管理員
本章要點 v 系統管理員 v 使用者管理 v 使用者組管理 v 使用使用者管理器管理使用者和組 學習要求 v 了解系統管理員的作用及其許可權 v 掌握使用 useradd 命令新增使用者的方法 v 掌握使用passwd命令為所新增的使用者設定密碼的方法 v 掌握使用groupadd 命令新增使用者組...
主資料系統管理員面試 給系統管理員的面試建議
主資料系統管理員面試 作為過去三年中系統管理員 sys admin 的招聘經理,我知道我正在尋找加入我的開源團隊的候選人。當然,我的責任是嘗試聘用全球最優秀的人才 候選人的責任是告訴我他們做了什麼以及如何做,以及他們希望自己的前途如何。我也在尋找那個火花。那件事告訴我這位候選人致力於開源的成功。在r...
Linux系統管理員必備
linux系統管理工具包系列彙總 linux系統管理員必看 vandyke securecrt 6.1.3 附特別檔案 linux administration handbook 第二版 linux伺服器配置全程實錄 時間管理 給系統管理員 中文高畫質pdf time management for ...