Web項目開發(fā)中常見安全問題防范

計算機程序主要就是輸入/輸出,安全問題由此產(chǎn)生,凡是有輸入的地方都可能帶來安全風(fēng)險。根據(jù)輸入的數(shù)據(jù)類型,web應(yīng)用主要有數(shù)值型、字符型、文件型。

要消除風(fēng)險就要對輸入的數(shù)據(jù)進行檢查,對于Web應(yīng)用來說,檢查的位置主要是前端和后端。前端檢查只能防止正常狀況,沒法防止使用工具、程序繞開檢查直接把數(shù)據(jù)發(fā)送給服務(wù)器。

輸入檢查

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

依據(jù)產(chǎn)品文檔的要求進行合法性檢查,數(shù)值型,手機號,時間,郵箱等

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

檢查文本型的長度

URL字符串轉(zhuǎn)義,使用urlencode函數(shù)處理

文件上傳

防止文件注入型攻擊。

1、文件上傳目錄設(shè)置成不可執(zhí)行

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

3、重命名文件名。

4、文件服務(wù)器使用獨立的域名。

輸出轉(zhuǎn)義

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

同理xml數(shù)據(jù)包里的字符串值使用xmlencode,json數(shù)據(jù)包的字符串值使用jsonencode轉(zhuǎn)義。

XSS處理

XSS的本質(zhì)是HTML注入,用戶輸入的數(shù)據(jù)被當(dāng)成Html代碼執(zhí)行了。

1、cookie使用HttpOnly限制

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

2、輸出文本HTML轉(zhuǎn)義

對網(wǎng)頁上顯示的文本內(nèi)容使用HtmlEncode轉(zhuǎn)義。js函數(shù):OWASP ESAPI中的encodeCharacter。其它的如xmlencode、jsonencode等轉(zhuǎn)義函數(shù)。

3、檢查輸入的URL

輸入的url添加上 http: 或者 https:,然后轉(zhuǎn)義輸出到網(wǎng)頁端

4、對傳入js函數(shù)的文本型參數(shù)值進行javascript轉(zhuǎn)義

先進行javascript轉(zhuǎn)義再進行HTML轉(zhuǎn)義。

總結(jié)如下

SQL注入

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

XST處理

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

CSRF攻擊的防御

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

HTTP頭注入

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

Cookie安全

Cookie僅保存SessionId值,設(shè)置HttpOnly屬性為On,

用戶密碼安全

1、使用安全的bcrypt替代MD5,bcrypt會產(chǎn)生隨機鹽 salt

權(quán)限控制

1、SSO單點登錄。OpenID系統(tǒng)

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

3、基于數(shù)據(jù)的訪問控制。比如將用戶Id、對象id修改成另一個存在的id,如果沒有檢查當(dāng)前登錄用戶是否是參數(shù)對應(yīng)的id用戶,就會產(chǎn)生修改別的用戶數(shù)據(jù)的問題,也即是越權(quán)訪問。

4、OAuth授權(quán)。OAuth第三方開源庫

5、SessionId。sessionid加密處理


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容