簡介 由於網路技術日趨成熟,黑客們也將註意力從以往對網路伺服器的攻擊逐步轉移到了對web應用的攻擊。據最新調查,信息安全有75%都發生在web應用而非網路層面。 場景 1. 控制訪問的許可權。只讓可以訪問的訪問到最小的資源和許可權。 2. 控制輸入內容。所有輸入都可能是不安全的,所以要過濾。 3. 保證 ...
簡介
由於網路技術日趨成熟,黑客們也將註意力從以往對網路伺服器的攻擊逐步轉移到了對web應用的攻擊。據最新調查,信息安全有75%都發生在web應用而非網路層面。
場景
- 控制訪問的許可權。只讓可以訪問的訪問到最小的資源和許可權。
- 控制輸入內容。所有輸入都可能是不安全的,所以要過濾。
- 保證業務的安全。
- 保證數據的安全性。
- 控制輸出內容。要過濾輸出的內容,解決瀏覽器安全問題。
解決問題
輸入和輸出的很多問題,都可以通過Aop的思想來統一解決。儘量讓應用的問題都通過架構去實現,以避免因為開發人員因素,而且對正常業務是透明、不可見的。
人為的因素,需要有代碼評審流程,甚至需要安全的軟體構建流程去規避。
應用安全
- 千萬不要用root!!!啟動程式。
- 運行的用戶不允許對源代碼有修改的許可權。
- 需要有新文件生成的目錄(比如文件上傳,動態代理等),不能有執行的許可權。
- 不允許用戶訪問目錄。基於tomcat來說,把所有的視圖文件(jsp、ftl等)放到WEB-INF下。webapp下不直接放任何文件。
控制輸入內容
用戶所有的輸入,都可以認為是不安全的。千!萬!不!要!以為用戶的輸入是合法的。要採取防禦式的方式去處理應用。確保應用的安全。一般我們提倡的是:防禦式架構和防禦式編程。
控制http參數
- 千萬不要亂用數據類型。使用基本數據類型,少用包裝類。包裝類容易被攻擊。不要用String去接受所有類型數據。原則上:是什麼類型就用什麼類型去接收。
- 通過架構設計,添加一層設置處理http參數(驗證數據的類型、合法性、長度和範圍)。一般都是通過aop來實現。比如:對郵件、手機的驗證,對非法數字(小於0)的驗證,對整數最大值的驗證,對字元串最大長度的驗證等。
文件上傳
- 控制文件類型,通過尾碼控制。上傳文件的尾碼要使用白名單,不要使用黑名單。只允許我們知道的文件類型上傳。這樣能確保全全性。
- 控制文件的大小。文件大小必須控制,否則容易出現系統硬碟資源被吃滿。
- 上傳的文件要壓縮。這樣就算裡面有攻擊的代碼也會被破壞掉。
- 上傳的文件名要隨機、而且沒有規律。可以考慮uuid。否則容易被猜測,然後把文件拖走。
sql註入
- 通過框架的參數化去解決。
- 要有嚴格的規範以及日常的代碼評審。人為的因素,往往是很多安全問題的罪魁禍首。
- 要嚴格規劃應用對資料庫操作的用戶。只允許有查看和修改數據的許可權。就算是出了安全問題,也能把問題減少到最低,比如:至少避免被攻擊者直接drop database.
html註入
通過架構的方法,凈化。實現思路aop。
在http到執行方法前,把標簽凈化掉。如果確實有需要富文本的地方,一定也要使用白名單的方式,只允許少數合法標簽,其他的也全部凈化。
java有一個開發框架是:Anti-Samy,或者自己通過正則來實現。
數據敏感詞
通過架構的方法,分詞、詞庫去解決。實現思路aop。
可以根據敏感的程式來判斷處理機制。
如果程度一般,則可以通過**來替換。
如果程度太高,涉及黃或者國家安全等,則可以拒絕輸入。
保證業務的安全
每一個業務都要考慮是不安全的。然後都應該有對應的處理機制。
防止暴力破解
暴力破解是一種非常容易被忽視的安全問題。
這種問題的解決思路:
- 提升密碼複雜度。太簡單的密碼要拒絕。
- 記錄驗證頻率。超過這個頻率就拒絕。
比如:登錄,簡訊驗證碼,支付密碼等用戶核心安全業務。
不安全的直接對象引用
不安全的直接對象引用 ,即訪問不屬於自己的業務。
在業務設計的時候要明確哪些是允許其他用戶訪問的,其他的都不允許訪問。還是根據最小原則來處理。
比如:不訪問訪問別人的訂單信息。
不要信任用戶輸入的數據
重要的信息,千萬不能通過讓用戶傳輸過來。千萬不能自認為這些用戶不會輸入啊,都是我們設置好的。
比如:訂單的金額,是否有操作的許可權等。
嚴格的許可權控制
- 水平許可權控制。用戶是否有操作業務的操作。比如,用戶對應的角色和身份不允許訪問指定的業務。
- 垂直許可權控制。用戶是否按指定的業務流程操作。比如,在一些流程過程中需要先有合同才能進貨,在一些流程中需要先填寫個人信息才能使用後面的功能。
保證數據的安全
互聯網的時代,數據也是極為重要的資源。
不可以預見性
對於重要資源,要隨機性,要不然容易被測試到規則,全部拖走。
比如用戶外頁信息 /home/x.html。這裡的x用的是數字。
控制資源訪問的頻率
比如,只允許同一個ip訪問100次每天。這個規則,可以根據產品或者運營來共同制定。實現思路:通過aop
記錄數據操作記錄
重要的信息操作的時候,要有記錄。實現思路:通過aop。
控制輸出內容
輸出的內容確保是乾凈的,對用戶不會有危險的。同時也不會泄露伺服器的信息。
過濾敏感信息
- 把代碼的註釋去除。通過aop實現。
- 拒絕伺服器相關的信息,比如ip。這個需要在代碼評審的時候核實。不能有任何硬編碼泄露伺服器信息的地方。
- 異常不要說的太明確。每個異常都是要處理的。如果不清楚的異常,提示模糊信息即可,然後把明確的信息記錄到日誌。 通過aop實現
驗證方法
- 通過ibm appscan工具驗證。能解決常見的安全問題
- 目錄遍歷。御劍。
- web後臺暴力破解。httprint。
更牛B的解決方案
雲WAF發展的新道路。感興趣的看參考資料。感覺棒棒噠,果斷還是驗證了那句經典的話重覆就會被解決
。