web前後端開發不得不聊的安全問題

狄仁傑小短腿發表於2017-10-07

web專案安全大致可以分為兩個方面:
1.私密性:資料不被非法獲取和利用,只有授權才可以利用。
2.可靠性:資料不丟失不損壞不被篡改。
web安全大概有這麼幾個層面:
1.程式碼層。2.架構層面。3.運維層面。
開發者需要的安全問題比如:使用者身份被盜用,使用者密碼洩露,使用者資料被盜取,網站資料庫洩露等。。。
web安全的重要性:直面使用者,挑戰嚴峻;網站和使用者安全是生命線;安全事故威脅企業生產、口碑甚至生存;作為開發者應該掌握基礎的安全知識,嚴肅對待這個問題。
學習內容:
跨站指令碼攻擊XSS,跨站請求偽造攻擊CSRF,前端Cookies安全性,點選劫持攻擊,傳輸過程安全問題,使用者密碼安全問題,SQL隱碼攻擊,資訊洩露和社會工程學,其他安全問題。
那麼我們需要掌握哪些知識,原生JavaScript,少量後端語言基礎(Node),HTTP基礎知識(含Cookies/Session),web後端基礎知識(HTTP/SQL)。
XSS(Cross Site Scripting)跨站指令碼攻擊:


Scripting能幹啥?
獲取頁面資料,獲取Cookies,劫持前端邏輯,傳送請求等。
偷取網站任意資料,偷取使用者資料,偷取使用者密碼和登陸狀態,欺騙使用者。
XSS攻擊分類:
反射型:url引數直接注入;攻擊者將程式碼通過url帶過來,頁面直接顯示這串程式碼。
儲存型:儲存到DB讀取時注入;xss攻擊程式碼會儲存到網站資料中,在使用者訪問到這條記錄,會被從資料庫中讀取出來顯示在頁面中。
反射型攻擊略小於儲存型攻擊,因為攜帶在url中更容易被使用者發現。
XSS攻擊注入點:
HTML節點內容,HTML屬性,JavaScript程式碼,富文字。
1)HTML節點內容


2)HTML屬性


3)JavaScript程式碼

4)富文字
富文字得保留HTML,HTML有XSS攻擊風險。
瀏覽器自帶防禦

防禦範圍:引數出現在HTML內容或屬性攔截,在javascript出現中的不攔截,所以說瀏覽器自帶防禦非常有限的。
瀏覽器對XSS攻擊防禦是有限的,如何針對上述四種XSS攻擊進行防禦呢?
1.比如事例中的評論,我們只希望使用者輸入文字,而不是輸入html標籤。這種情況我們需要對內容進行轉義,那轉義內容html中的標記(尖括號)

對字串進行轉義
2.JavaScript程式碼對 進行轉義
3.富文字
1)黑名單:在輸入的時候進行過濾(正則)<script>標籤,輸出的時候過濾比較影響效能。
2)白名單:解析html返回dom樹(使用cheerio外掛)。


那麼針對XSS攻擊主要的解決方法就是轉義。

CSP(Content Security Policy)內容安全策略
用於指定哪些內容可執行


那麼前面講的幾種方法:1)內建函式轉義;2)DOM解析白名單;3)第三方庫;4)CSP

CSRF(Cross Site Request Forgy)跨站請求偽造
在其他網站對本網站產生影響。也就是其他網站對目標網站,在使用者不知情的情況下發起了某些請求。
1)如下圖(post請求):寫入一個表單,action為介面,以iframe形式插入,發起請求。


2)如下圖(get請求):以超連結形式讓使用者點選進入網站,其實是傳送了一個get請求。

也就是所謂的網路蠕蟲,擴散範圍非常之大。
CSRF攻擊原理:


csrf攻擊危害
利用使用者登陸態,使用者不知情,完成業務請求,盜取使用者資金(轉賬、消費),冒充使用者發帖背鍋,損壞網站名譽。
CSRF攻擊如何進行防禦?
登陸設定cookies的sameSite屬性:

在響應Response Headers裡面Set-Cookies:sameSite=strict這個屬性,目前相容性Chrome支援這種防禦方式。
在前端頁面加入驗證資訊
前面說過CSRF攻擊有幾個特徵,在訪問目標網站後端的時候並不會訪問目標網站的前端。那麼我們在A網站的前端加一些驗證資訊,這些資訊只有在A網站的前端獲得這些資訊,如果不經過A網站前端是無法獲得這些資訊,那麼無法驗證成功的。
1)驗證碼<圖形驗證碼ccap>;
2)token;
referer為B網站(來自攻擊網站)
包含這個請求是來自哪裡的資訊請求頭。 驗證referer,禁止來自第三方網站請求。

利用httpreferer頭來防禦csrf攻擊的原理和方法。
CSRF主要防禦方式:
1.禁止第三方網站帶Cookies,same-site屬性。
2.前端頁面加入驗證碼和token的方式。
3.驗證referer。


Cookies
前端資料儲存,後端通過HTTP頭設定,請求時通過http頭傳給後端,前端可讀寫,遵守同源策略。
Cookies特性:
1)域名;
2)有效期;
3)路徑;
4)http-only;
5)secure;cookies在快取中使用,在http中是無法使用的。
document.cookies
Cookies作用
儲存個性化設定,儲存未登入時使用者唯一標識,儲存已登入使用者的憑證,儲存其他業務資料。
一、Cookies-登陸使用者憑證
前端提交使用者名稱和密碼,後端設定使用者名稱和密碼,後端通過http頭設定使用者憑證,後端訪問時後端先驗證使用者憑證。
直接使用使用者ID作為cookies是有很大的隱患,一般使用使用者ID+簽名(保證說只有我能算出來,別人計算不出來的)。將使用者ID+簽名傳送給後臺,如果不一致證明使用者userID被篡改過。
祕鑰 銘文 簽名
常用的還有另外的幾種方式:SessionId (把使用者資料放在記憶體中的,通過給前端傳送一個隨機字串相當於一個標示,前端是不需要儲存的再次請求只需要帶上這個標示,就能夠在記憶體中把之前的資料找出,會話)


Cookies和XSS的關係
XSS可能偷取Cookies,htpp-only的Cookies不會被偷。
Cookies和CSRF的關係
CSRF利用了使用者的Cookies,攻擊站點無法讀寫Cookies,最好能阻止第三方使用Cookies。
Cookies安全策略
加簽名防止篡改,私有變換(加密),http-only(防止XSS),secure,same-site。


點選劫持
原理:通過一個iframe,將目標網站放到頁面上,這樣使用者操作的其實是iframe,將iframe的透明度設定為0,使用者可以操作這個iframe。
使用者親手操作,使用者不知情。危害:盜取使用者資金(轉賬、消費),獲取使用者敏感資訊。
點選劫持防禦:
1)JavaScript禁止內嵌。

2)X-FRAME-OPTIONS禁止內嵌。‘DENY’不允許內嵌
防禦原理:使用前端js禁止內嵌,發現內嵌就跳走。使用X-FRAME-OPTIONS的http頭禁止被iframe。



HTTP竊聽:
竊聽使用者密碼,竊聽傳輸敏感資訊,非法獲取個人資料。
HTTP篡改:
接入廣告,重定向網站,無法防禦的XSS和CSRF攻擊。
運營商劫持.....
HTTS
加密:銘文轉換成密文。
怎麼樣在生產環境部署https,在控制檯開啟scurity檢視證照。


密碼安全
密碼的作用,密碼的儲存,密碼的傳輸,密碼的替代方案,生物特徵密碼的密碼(指紋、人臉等)。
密碼-洩露渠道:
資料庫被偷,伺服器被入侵,通訊被竊聽,內部人員洩露資料,其他網站的密碼(撞庫)。
密碼-儲存:
嚴禁密碼銘文儲存(防洩露),單向變換(防洩露),變換複雜度要求(防猜解),密碼複雜度要求(防猜解),加鹽(防猜解)
密碼-雜湊演算法:
明文-密文----一一對應,雪崩效應,密文-銘文無法反推,密文固定長度。
常見雜湊演算法:
md5,sha1,sha256。
密碼-單向變換彩虹表

密碼變換次數越多越安全:加密成本幾乎不變(生成密碼時速度慢一些),彩虹表失效(數量太大,無法建立通用性),解密成本增大N倍。
密碼-密碼傳輸的安全性:
https傳輸,頻率限制,前端加密意義有限。
密碼生物特性密碼:
私密性-容易洩露,安全性-碰撞,唯一性-終身唯一-無法修改。


上傳問題
1.上傳檔案。2.再次訪問上傳的檔案。3.上傳的檔案被當成程式解析。
上傳問題防禦:
1.限制上傳字尾。2.檔案型別檢查。3.檔案內容檢查。4.程式輸出。5.許可權-可寫可執行互斥。


資訊洩露
洩露系統敏感資訊,洩露使用者敏感資訊,洩露密碼。
資訊洩露的途徑:錯誤資訊失控,SQL隱碼攻擊,水平許可權控制不當,XSS/CSRF。。。


拒絕服務攻擊DOS
模擬正常使用者,大量佔用伺服器資源,無法服務正常使用者,TCP半連結,Http連結,DNS
大規模分散式拒絕服務攻擊DDOS

相關文章