Web項目開發中常見安全問題及防范


計算機程序主要就是輸入數據 經過處理之后 輸出結果,安全問題由此產生,凡是有輸入的地方都可能帶來安全風險。根據輸入的數據類型,Web應用主要有數值型、字符型、文件型。

要消除風險就要對輸入的數據進行檢查,對於Web應用來說,檢查的位置主要是前端和后端。前端檢查只能防止正常狀況,沒法防止通過工具、程序繞開前端檢查直接把數據發送給后端。

輸入檢查

防止輸入注入型攻擊。所有的輸入數據都要檢查,除了前端檢查外,為防止使用工具、程序繞開前端檢查直接把數據發送給服務器,后端也要檢查所有輸入數據。

依據產品文檔的要求進行合法性檢查,數值型,手機號,時間,郵箱等。

檢查文本型是否含控制字符,過濾掉控制字符

檢查文本型的長度

Querystring中參數值字符串轉義,使用urlencode函數處理

文件上傳

防止文件注入型攻擊。

1、文件上傳目錄設置成不可執行

2、判斷文件類型。結合MIME type與文件擴展名,設置文件類型白名單。對於圖片文件,可以利用圖片庫函數深層次檢查是否真是圖片。

3、重命名文件名。

4、文件服務器使用獨立的域名。

輸出轉義

防止XSS(跨站腳本攻擊)。向頁面輸出的文本型數據進行html encode(轉義),即是將一些html中的特殊字符轉義成普通字符,比如 & 轉義成 &amp;< 轉義成 &lt;,'與"都要轉義。對應的函數:javascriptencode,php的htmlentities。

同理xml數據包里的字符串值使用xmlencode,json數據包的字符串值使用jsonencode轉義。

XSS處理

XSS的本質是HTML注入,用戶輸入的數據被當成Html代碼執行了。

1、cookie使用HttpOnly限制

使得在客戶端的js代碼不能讀取cookie值,但是不能防止從HTTP header里得到cookie值。

2、輸出文本HTML轉義

對網頁上顯示的文本內容使用HtmlEncode轉義。js函數:OWASP ESAPI中的encodeCharacter。其它的如xmlencode、jsonencode等轉義函數。

3、檢查輸入的URL

輸入的url添加上 http: 或者 https:,然后轉義輸出到網頁端

4、對傳入js函數的文本型參數值進行javascript轉義

先進行javascript轉義再進行HTML轉義。

總結如下

SQL注入

預防辦法:數據與代碼分離,即不用字符串拼湊SQL語句,使用SQL預處理方法(參數使用占位符 ?)。

XST處理

XST(跨站追蹤)攻擊,關閉Web 服務器的TRACE方法。

CSRF攻擊的防御

通常需要防御CSRF(Cross-Site Request Forgeries)攻擊的頁面是用戶登錄、修改/刪除確認、訂單確認等添加新數據、修改數據的頁面,此外此類頁面必須使用POST方式提交。

HTTP頭注入

替換HTTP頭字符值中的換行符。

Cookie安全

Cookie僅保存SessionId值,設置HttpOnly屬性為On,

用戶密碼安全

1、使用安全的bcrypt替代MD5(MD5本來用於生成指紋,用來做加密算法是誤用),bcrypt會產生隨機鹽 salt

權限控制

1、SSO單點登錄。OpenID系統

2、Spring Security的實現-基於角色的訪問控制(Role-Based Access Control)RBAC

3、基於數據的訪問控制。比如將用戶id、對象id修改成另一個存在的id,如果沒有檢查當前登錄用戶是否是參數對應的id用戶,就會產生竄改另一個用戶數據的問題,也即是越權訪問。

4、OAuth授權。OAuth第三方開源庫

5、Sessionid。sessionid加密處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM