轉自:http://www.codingforums.com/showthread.php?t=176717php
php編程安全指南
一、通常
1)lamp系統安全設置
2)php.ini安全設置
3)使用MVC框架html
二、數據傳輸
1)在$_GET的$_POST,$_COOKIE,和$_REQUEST中,消毒和驗證以前以編程方式操縱數據中包含的全部數據
2)SQL注入
定義:代碼注入技術,利用一個安全漏洞,在應用程序的數據庫層發生。該漏洞是存在的,當用戶輸入或者不正確的字符串文字轉義字符中嵌入SQL語句或用戶輸入不強類型,從而意外地執行過濾。
預防:mysql_real_escape_string($string)
3)跨站點腳本(XSS)
定義:安全漏洞,一般在Web應用程序的其餘用戶瀏覽網頁,它容許惡意web用戶將代碼注入。這樣的例子:包括客戶端腳本(即JavaScript)的。
預防:htmlentities(strip_tags($string))
三、瀏覽器的請求
1)跨站點請求僞造(CSRF)
定 義:攻擊經過在受權用戶訪問的頁面中包含連接或者腳本的方式工做。例如:一個網站用戶Bob可能正在瀏覽聊天論壇,而同時另外一個用戶Alice也在此論壇 中,而且後者剛剛發佈了一個具備Bob銀行連接的圖片消息。設想一下,Alice編寫了一個在Bob的銀行站點上進行取款的form提交的連接,並將此鏈 接做爲圖片tag。若是Bob的銀行在cookie中保存他的受權信息,而且此cookie沒有過時,那麼當Bob的瀏覽器嘗試裝載圖片時將提交這個取款 form和他的cookie,這樣在沒經Bob贊成的狀況下便受權了此次事務。
預防:生成一個獨特的「令牌」,一般當一個瀏覽器會話的開始。通 過令牌在全部POST和GET請求。繼POST/ GET行動,檢查存在的會話令牌,而後確認郵寄令牌/ GET存儲在會話中的令牌相同。 (像CakePHP的MVC框架,使得這個比較容易實現整個應用程序的統一。)mysql
四、Sessions
1)殺死一個會話時,銷燬會話數據
當session會話完成後(「註銷」),銷燬其數據,不僅是清除cookie,不然惡意用戶能從新恢復cookie和再次使用session。能夠將$_SESSION中的全部索引置空
2)以文件形式存儲session在網站的webroot文件或存儲在數據庫
在服務器上保存session的默認路徑能夠被劫持的,尤爲是在一個共享的主機環境。web
五、密碼
1)應用強密碼
須要數字,符號,大寫和小寫字母的密碼
密碼長度應該在12至14個字符
2)加密
至少使用SHA1()哈希加密(不使用md5()),hash()函數提供了一些額外的哈希選擇,包括SHA256。添加一個「特定的應用程序」來加密sql
六、通常的php.ini配置
1)Disable register_globals
預防: register_globals = Off
2)Disable magic quotes
預防: magic_quotes_gpc = Off
3)Disable error reporting
預防: display_errors = Off
4)Enable error logging and save log file to a directory above web root
預防: log_errors = On;
ignore_repeated_errors = On;
html_errors = Off;
error_log = /path/above/webroot/logs/php_error_log
5)保存session數據到webroot的目錄下
預防: session.save_path = /path/above/webroot/sessions數據庫
七、webroot下載的.htaccess文件
1)Disable directory listings site-wide
預防: Options -Indexes編程
八、重要/敏感文件
1)防止未經受權的訪問/下載
這包括網站管理/成員,部分網站/數據庫配置文件等
2)使用腳本文件做爲中介,做爲附件
3)不斷更新你的腳本(WordPress的,phpMyAdmin的,等)的密碼。
4)當你正在使用時可使phpMyAdmin容許訪問,這可防止別人對您的利用"零日漏洞"破壞
「零日漏洞」(zero-day)又叫零時差攻擊,是指被發現後當即被惡意利用的安全漏洞。通俗地講,即安全補丁與瑕疵曝光的同一日內,相關的惡意程序就出現。這種攻擊每每具備很大的突發性與破壞性。
九、文件上傳
1)在數據操做前必定要對$_FILES進行驗證,判斷文件是否已經在 $_FILES 中
2)請注意提供的MIME類型可能欺騙或其致使他方式錯誤
3)全部用戶上傳的文件應移動到網站根目錄以上的目錄
4)不要執行用戶上傳的文件,或者用include require等包含用戶上傳的文件
5)儘可能不要設定腳本類型爲application/octet-stream,」 「application/unknown,」 or 「plain/text」瀏覽器
十、其餘
在webroot下,被網站開發人員建立和使用的「實用工具」文件/程序,若是不打算被網站用戶訪問和使用,那麼在放到外網以前應該將他們所有刪除,下降的網站的安全風險。安全