PHP安全防範

http://www.jefflei.com/post/1252.html

PHP代碼安全和XSS,SQL注入等對於各類網站的安全非常中用,尤其是UGC(User Generated Content)網站,論壇和電子商務網站,常常是XSS和SQL注入的重災區。這裏簡單介紹一些基本編程要點, 相對系統安全來說,php安全防範更多要求編程人員對用戶輸入的各種參數能更細心.

php編譯過程中的安全

建議安裝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預處理

mysql_real_escape_string (很多PHPer仍在依靠addslashes防止SQL注入,但是這種方式對中文編碼仍然是有問題的。addslashes的問題在於黑客可以用0xbf27來代替單引號,GBK編碼中0xbf27不是一個合法字符,因此addslashes只是將0xbf5c27,成爲一個有效的多字節字符,其中的0xbf5c仍會被看作是單引號,具體見這篇文章)。用mysql_real_escape_string函數也需要指定正確的字符集,否則依然可能有問題。
prepare + execute(PDO)
ZendFramework可以用DB類的quote或者quoteInto, 這兩個方法是根據各種數據庫實施不用方法的,不會像mysql_real_escape_string只能用於mysql

用戶輸入的處理

無需保留HTML標籤的可以用以下方法

strip_tags, 刪除string中所有html標籤
htmlspecialchars,只對”<”,”>”,”;”,”’”字符進行轉義
htmlentities,對所有html進行轉義

必須保留HTML標籤情況下可以考慮以下工具:
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
htmLawedPHP code to purify & filter HTML

上傳文件

用is_uploaded_file和move_uploaded_file函數,使用HTTP_POST_FILES[]數組。並通過去掉上傳目錄的PHP解釋功能來防止用戶上傳php腳本。
ZF框架下可以考慮使用File_upload模塊

Session,Cookie和Form的安全處理

不要依賴Cookie進行核心驗證,重要信息需要加密, Form Post之前對傳輸數據進行哈希, 例如你發出去的form元素如下:

<pre lang="php">&lt;input type="hidden" name="H[name]" value="&lt;?php echo $Oname?&gt;"/&gt;
&lt;input type="hidden" name="H[age]" value="&lt;?php echo $Oage?&gt;"/&gt;
&lt;?php $sign = md5('name'.$Oname.'age'.$Oage.$secret); ?&gt;
&lt;input type="hidden" name="hash" value="&lt;?php echo $sign?&gt;"" /&gt;

POST回來之後對參數進行驗證

$str = "";
foreach($_POST['H'] as $key=&gt;$value) {
  $str .= $key.$value;
}
if($_POST['hash'] != md5($str.$secret)) {
  echo "Hidden form data modified"; exit;
}

PHP安全檢測工具(XSS和SQL Insertion)

Wapiti - Web application security auditor(Wapiti - 小巧的站點漏洞檢測工具) (SQL injection/XSS攻擊檢查工具)
安裝/使用方法:
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 PHPPixy - PHP 源碼缺陷分析工具)
安裝: apt-get install default-jdk
Remote PHP Vulnerability Scanner(自動化 PHP頁面缺陷分析, XSS檢測功能較強)
PHPIDS - PHP 入侵檢測系統

發佈了40 篇原創文章 · 獲贊 0 · 訪問量 4386
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章