影響web安全的主要因素就是使用者輸入的不可控,這篇文章就從乙個巨集觀的角度來分析一下如何去保證乙個應用程式的安全。
為了保證web安全,首先就是要分析應用程式中那些方面容易遭受到攻擊,然後根據分析結果在制定具體的安全方案。web應用程式的基本安全問題(所有使用者的輸入都是不可信的)致使應用程式實施大量安全機制來抵禦攻擊。
總體來說,web安全程式採用的防禦機制由一下幾個核心因素構成:
1.處理使用者訪問應用程式的資料與功能,防止使用者獲得未授權訪問;(使用者訪問:身份驗證,會話管理,許可權控制)
2.處理使用者對應用程式功能的輸入,防止使用者錯誤輸入造成不良行為;(過濾使用者的輸入)
3.防範攻擊者,確保應用程式稱為直接攻擊目標時能夠正常運轉,並採取防禦與攻擊措施挫敗攻擊者;(適當的防禦措施)
4.管理應用程式本身,幫助管理員監控其行為,配置其功能。(監控管理員行為)
首先來說一下如何處理使用者的訪問:幾乎任何應用程式都必須滿足乙個中心安全要求,即處理使用者訪問其資料與功能。在通常情況下,使用者一般分為幾種型別,如匿名使用者,正常通過驗證的使用者和管理使用者。而且,許多情況下,不同使用者只允許訪問不同的資料。
大多數web應用程式使用三層相互關聯的安全機制處理使用者訪問:身份驗證,會話管理,訪問控制。這三個機制都是應用程式受攻擊面的乙個關鍵部分,對於應用程式的總體安全狀況及其重要。由於這些機制相互依賴,因此根本不能提供強大的總體安全保護,任何乙個部分存在缺陷都可能是攻擊者自有訪問應用程式的功能與資料。
對於身份驗證來說,最常用的安全方法是使用者名稱和密碼,但這方面往往存在各種各樣的問題,常見的問題如利用邏輯缺陷完成避開登陸功能,根據使用者名稱猜測密碼等。對於身份驗證機制的攻擊行為一般包括暴力破解,撞庫,sql注入,邏輯缺陷等,在設計身份驗證功能模組時,應充分考慮到這些因素,進入放暴力破解模組,檢查驗證是否可以被繞過等。
會話管理是另乙個重要的安全因素,為實施有限的訪問控制,應用程式需要識別並處理每一名使用者提交的各種請求,所以必須識別出目前登陸的使用者。以前看到乙個講解會話很好的部落格,有興趣的可以看一下:就攻擊面而言,會話管理機制的有限性基本取決其令牌的安全性,因此再設計的時候,一定要保證令牌的不可**性。
訪問控制是給予不同的使用者以不同的許可權,不允許訪問為授權的使用者,許可權控制也是web安全中非常重要的一環。
所有的使用者的輸入都是不可信的,這條準則一定要牢牢地記住。因為其輸入的多樣性,攻擊者總是可以構造各種各樣的輸入來攻擊應用程式。
處理使用者輸入的方法一般是以下的幾種:
1.黑名單(拒絕已知的不良輸入):這種方法其實是有限制的,可以被輕易的繞過,例如過濾掉了select,我們可以用select來代替;同時要注意很多時候可以採用空位元組的方式來繞過黑名單。
2.白名單(接受已知的正常輸入):這種方法也是有缺陷,有的正常輸入中包含一些方法字元,我們不得不接受這些字元。
3,.淨化:以各種方式對其進行淨化,防止資料對其造成影響,例如對輸入進行轉義或者編碼。
4,.還有安全資料處理和語法檢查兩種方法對輸入進行過濾。
總之對於使用者輸入而言,沒有一種方法可以解決所有的問題,只有在合適的地方採取恰當的方法才能做到有效的防護。
同時,我們還要對攻擊者進行處理,主要有以下的措施:處理錯誤,維護審計日誌,向管理員發出警報,應對攻擊。
這次從巨集觀上說了以下如何保護應用程式的安全。
Web安全防禦從WAF到應用閘道器
傳統waf的主要問題 1.agent模式的waf需要在目標主機上安裝agent,維護管理工作量較大 2.純網路層waf,以及第三方反向 waf,如需支援https,則需要提供證書給服務商,導致證書私鑰擴散,可能會洩漏 3.waf回源 到真實的業務 走公網,如果明文傳輸,存在資料洩漏風險 如果加密傳輸...
web層安全防範
1.銘記乙個基本原則 永遠也不要相信使用者的輸入!2.輸入檢測。是否驗證了它的 是否檢查了字段的長度?為空或者超長是否會產生問題?是否限制了字段的可用字符集?數值型 英文本母 可見字元 中文字元,etc是否含有對程式有特殊含義的字元?是否限制了字段的取值範圍 特別是數值型資料 是否限制了字段的格式?...
web資料安全 防篡改
篡改的兩種方式 1.第三方篡改 意思是說在資料由使用者發到伺服器的途中,資料被第三方篡改,造成傳送的資料和接收的資料不一致,防止此類情況的發生的常用做法如下 1 將要提交的引數先做加密 2 然後把加密的資訊做一次md5摘要,也就是簽名 3 然後把摘要連同引數一起回傳給伺服器 4 伺服器拿到引數後,同...