基于PHP開發(fā)中的安全防范知識(shí)詳解
PHP代碼安全和XSS,SQL注入等對(duì)于各類網(wǎng)站的安全非常中用,尤其是UGC(User Generated Content)網(wǎng)站,論壇和電子商務(wù)網(wǎng)站,常常是XSS和SQL注入的重災(zāi)區(qū)。這里簡單介紹一些基本編程要點(diǎn), 相對(duì)系統(tǒng)安全來說,php安全防范更多要求編程人員對(duì)用戶輸入的各種參數(shù)能更細(xì)心.
php編譯過程中的安全
建議安裝Suhosin補(bǔ)丁,必裝安全補(bǔ)丁
php.ini安全設(shè)置
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預(yù)處理
mysql_real_escape_string (很多PHPer仍在依靠addslashes防止SQL注入,但是這種方式對(duì)中文編碼仍然是有問題的。addslashes的問題在于黑客可以用 0xbf27來代替單引號(hào),GBK編碼中0xbf27不是一個(gè)合法字符,因此addslashes只是將0xbf5c27,成為一個(gè)有效的多字節(jié)字符,其 中的0xbf5c仍會(huì)被看作是單引號(hào),具體見這篇文章)。用mysql_real_escape_string函數(shù)也需要指定正確的字符集,否則依然可能 有問題。
prepare + execute(PDO)
ZendFramework可以用DB類的quote或者quoteInto, 這兩個(gè)方法是根據(jù)各種數(shù)據(jù)庫實(shí)施不用方法的,不會(huì)像mysql_real_escape_string只能用于mysql
用戶輸入的處理
無需保留HTML標(biāo)簽的可以用以下方法
strip_tags, 刪除string中所有html標(biāo)簽
htmlspecialchars,只對(duì)”<”,”>”,”;”,”'”字符進(jìn)行轉(zhuǎn)義
htmlentities,對(duì)所有html進(jìn)行轉(zhuǎn)義
必須保留HTML標(biāo)簽情況下可以考慮以下工具:
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
上傳文件
用is_uploaded_file和move_uploaded_file函數(shù),使用HTTP_POST_FILES[]數(shù)組。并通過去掉上傳目錄的PHP解釋功能來防止用戶上傳php腳本。
ZF框架下可以考慮使用File_upload模塊
Session,Cookie和Form的安全處理
不要依賴Cookie進(jìn)行核心驗(yàn)證,重要信息需要加密, Form Post之前對(duì)傳輸數(shù)據(jù)進(jìn)行哈希, 例如你發(fā)出去的form元素如下:
<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回來之后對(duì)參數(shù)進(jìn)行驗(yàn)證
$str = "";
foreach($_POST['H'] as $key=>$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 - 小巧的站點(diǎn)漏洞檢測工具) (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 PHP( Pixy - PHP 源碼缺陷分析工具)
安裝: apt-get install default-jdk
- PHP魔術(shù)引號(hào)所帶來的安全問題分析
- PHP開發(fā)中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
- php安全開發(fā) 添加隨機(jī)字符串驗(yàn)證,防止偽造跨站請(qǐng)求
- 簡單的方法讓你的后臺(tái)登錄更加安全(php中加session驗(yàn)證)
- php中安全模式safe_mode配置教程
- PHP安全性漫談
- 理解php Hash函數(shù),增強(qiáng)密碼安全
- PHP防注入安全代碼
- php.ini 啟用disable_functions提高安全
- php表單提交程序的安全使用方法
- 淺談php安全性需要注意的幾點(diǎn)事項(xiàng)
相關(guān)文章
php打印一個(gè)邊長為N的實(shí)心和空心菱型的方法
這篇文章主要介紹了php打印一個(gè)邊長為N的實(shí)心和空心菱型的方法,實(shí)例分析了php循環(huán)語句繪制圖形的技巧,需要的朋友可以參考下2015-03-03利用phpexcel對(duì)數(shù)據(jù)庫數(shù)據(jù)的導(dǎo)入excel(excel篩選)、導(dǎo)出excel
本篇文章主要介紹了利用phpexcel對(duì)數(shù)據(jù)庫數(shù)據(jù)的導(dǎo)入excel(excel篩選)、導(dǎo)出excel的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04PHP正則替換函數(shù)preg_replace()報(bào)錯(cuò):Notice Use of undefined constant的解
這篇文章主要介紹了PHP正則替換函數(shù)preg_replace()報(bào)錯(cuò):Notice Use of undefined constant的解決方法,結(jié)合具體實(shí)例形式分析了preg_replace()報(bào)錯(cuò)的原因與相關(guān)解決技巧,需要的朋友可以參考下2017-02-02幾個(gè)實(shí)用的PHP內(nèi)置函數(shù)使用指南
本文給大家推薦了7個(gè)不經(jīng)常被用到,但實(shí)際很實(shí)用,功能很強(qiáng)大的php內(nèi)置函數(shù),用好了,可以省去小伙伴們很多的時(shí)間的。2014-11-11