php編程安全指南

 

轉自: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下,被網站開發人員建立和使用的「實用工具」文件/程序,若是不打算被網站用戶訪問和使用,那麼在放到外網以前應該將他們所有刪除,下降的網站的安全風險。安全

相關文章
相關標籤/搜索