
建議安裝Suhosin補丁,必裝安全補丁
Php.Ini安全設置
Register_global = Off
Magic_quotes_gpc = Off
Display_error = Off
Log_error = On
# Allow_url_fopen = Off
Expose_php = Off
Open_basedir =
Safe_mode = On
Disable_function = Exec,System,Passthru,Shell_exec,Escapeshellarg,Escapeshellcmd,Proc_close,Proc_open,Dl,Popen,Show_source,Get_cfg_var
Safe_mode_include_dir =
DB SQL預處理(lǐ)
Mysql_real_escape_string (很多PHPer仍在依靠Addslashes防止SQL注入,但(dàn)是這種方式對中文(wén)編碼仍然是有(yǒu)問題的(de)。Addslashes的(de)問題在于黑(hēi)客可(kě)以用(yòng) 0xbf27來代替單引号,GBK編碼中0xbf27不是一個(gè)合法字符,因此Addslashes隻是将0xbf5c27,成爲一個(gè)有(yǒu)效的(de)多字節字符,其 中的(de)0xbf5c仍會(huì)被看作是單引号,具體見這篇文(wén)章(zhāng))。用(yòng)Mysql_real_escape_string函數也(yě)需要指定正确的(de)字符集,否則依然可(kě)能(néng) 有(yǒu)問題。
Prepare + Execute(PDO)
ZendFramework可(kě)以用(yòng)DB類的(de)Quote或者QuoteInto, 這兩個(gè)方法是根據各種數據庫實施不用(yòng)方法的(de),不會(huì)像Mysql_real_escape_string隻能(néng)用(yòng)于Mysql
用(yòng)戶輸入的(de)處理(lǐ)
無需保留HTML标簽的(de)可(kě)以用(yòng)以下方法
Strip_tags, 删除String中所有(yǒu)Html标簽
Htmlspecialchars,隻對”<”,”>”,”;”,”’”字符進行(xíng)轉義
Htmlentities,對所有(yǒu)Html進行(xíng)轉義
必須保留HTML标簽情況下可(kě)以考慮以下工(gōng)具:
HTML Purifier: HTML Purifier Is A Standards-Compliant HTML Filter Library Written In PHP.
PHP HTML Sanitizer: Remove Unsafe Tags And Attributes From HTML Code
HtmLawed: PHP Code To Purify & Filter HTML
上(shàng)傳文(wén)件(jiàn)
用(yòng)Is_uploaded_file和(hé)Move_uploaded_file函數,使用(yòng)HTTP_POST_FILES[]數組。并通過去掉上(shàng)傳目錄的(de)PHP解釋功能(néng)來防止用(yòng)戶上(shàng)傳Php腳本。
ZF框架下可(kě)以考慮使用(yòng)File_upload模塊
Session,Cookie和(hé)Form的(de)安全處理(lǐ)
不要依賴Cookie進行(xíng)核心驗證,重要信息需要加密, Form Post之前對傳輸數據進行(xíng)哈希, 例如(rú)你(nǐ)發出去的(de)Form元素如(rú)下:
<Input Type="Hidden" Name="H[Name]" Value="<?Php Echo $Oname?>"/> <Input Type="Hidden" Name="H[Age]" Value="<?Php Echo $Oage?>"/> <?Php $Sign = Md5('Name'.$Oname.'Age'.$Oage.$Secret); ?> <Input Type="Hidden" Name="Hash" Value="<?Php Echo $Sign?>"" /> POST回來之後對參數進行(xíng)驗證
$Str = "";
Foreach(
<# WebPartBody #>POST['H'] As $Key=>$Value) {
$Str .= $Key.$Value;
}
If(
<# WebPartBody #>POST['Hash'] != Md5($Str.$Secret)) {
Echo "Hidden Form Data Modified"; Exit;
}
PHP安全檢測工(gōng)具(XSS和(hé)SQL Insertion)
Wapiti - Web Application Security Auditor(Wapiti - 小(xiǎo)巧的(de)站點漏洞檢測工(gōng)具) (SQL Injection/XSS攻擊檢查工(gōng)具)
安裝/使用(yòng)方法:
Apt-Get Install Libtidy-0.99-0 Python-Ctypes Python-Utidylib
Python Wapiti.Py Http://Your Website URL/ -M GET_XSS
Pixy: XSS And SQLI Scanner For PHP( Pixy - PHP 源碼缺陷分(fēn)析工(gōng)具)
安裝: Apt-Get Install Default-Jdk