系統管理員必須知道的PHP安全實踐

2022-09-02 14:03:13 字數 4546 閱讀 5507

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 ...