web專案安全大致可以分為兩個方面:
1.私密性:資料不被非法獲取和利用,只有授權才可以利用。
2.可靠性:資料不丟失不損壞不被篡改。
web安全大概有這麼幾個層面:
1.程式碼層。2.架構層面。3.運維層面。
開發者需要的安全問題比如:使用者身份被盜用,使用者密碼洩露,使用者資料被盜取,網站資料庫洩露等。。。
web安全的重要性:直面使用者,挑戰嚴峻;網站和使用者安全是生命線;安全事故威脅企業生產、口碑甚至生存;作為開發者應該掌握基礎的安全知識,嚴肅對待這個問題。
學習內容:
跨站指令碼攻擊XSS,跨站請求偽造攻擊CSRF,前端Cookies安全性,點選劫持攻擊,傳輸過程安全問題,使用者密碼安全問題,SQL隱碼攻擊,資訊洩露和社會工程學,其他安全問題。
那麼我們需要掌握哪些知識,原生JavaScript,少量後端語言基礎(Node),HTTP基礎知識(含Cookies/Session),web後端基礎知識(HTTP/SQL)。
XSS(Cross Site Scripting)跨站指令碼攻擊:
![](https://i.iter01.com/images/4dfbb4ebdac7d6589e16ed6d9e5f013a537e6c4e51b4881142f92124b24bbfb9.png)
Scripting能幹啥?
獲取頁面資料,獲取Cookies,劫持前端邏輯,傳送請求等。
偷取網站任意資料,偷取使用者資料,偷取使用者密碼和登陸狀態,欺騙使用者。
XSS攻擊分類:
反射型:url引數直接注入;攻擊者將程式碼通過url帶過來,頁面直接顯示這串程式碼。
儲存型:儲存到DB讀取時注入;xss攻擊程式碼會儲存到網站資料中,在使用者訪問到這條記錄,會被從資料庫中讀取出來顯示在頁面中。
反射型攻擊略小於儲存型攻擊,因為攜帶在url中更容易被使用者發現。
XSS攻擊注入點:
HTML節點內容,HTML屬性,JavaScript程式碼,富文字。
1)HTML節點內容
![](https://i.iter01.com/images/727ea315003da4da963ecdd70347912ff1c5db133524c04a7ff294bb2ad7238a.png)
2)HTML屬性
![](https://i.iter01.com/images/860ecb626c86ed51bff70d997876b41cce538133a6b3e987e896d48707772618.png)
3)JavaScript程式碼
![](https://i.iter01.com/images/c4e30068088b69375d39bd467fbde4b4712a277f6ccae487f9bf3aea71c019bc.png)
4)富文字
富文字得保留HTML,HTML有XSS攻擊風險。
瀏覽器自帶防禦
![](https://i.iter01.com/images/46b708951e655fd4d25f9d02732b24506f7cc1e34aec75c4b28b7f3802d06fdc.png)
防禦範圍:引數出現在HTML內容或屬性攔截,在javascript出現中的不攔截,所以說瀏覽器自帶防禦非常有限的。
瀏覽器對XSS攻擊防禦是有限的,如何針對上述四種XSS攻擊進行防禦呢?
1.比如事例中的評論,我們只希望使用者輸入文字,而不是輸入html標籤。這種情況我們需要對內容進行轉義,那轉義內容html中的標記(尖括號)
![](https://i.iter01.com/images/6e1290fee49799266a0f5fc205234d32cea412d62bd155415de37bf755000c34.png)
對字串進行轉義
![](https://i.iter01.com/images/7b4a80139361801383db216df5d6aa8d6c40f8bec6beb19ffc426e27fd64ce38.png)
3.富文字
1)黑名單:在輸入的時候進行過濾(正則)
<script>
標籤,輸出的時候過濾比較影響效能。2)白名單:解析html返回dom樹(使用cheerio外掛)。
![](https://i.iter01.com/images/fb302e3fae09af8d91b2f86f40f823232c96cdc30f8e27c8482dd7fa4f9d757a.png)
那麼針對XSS攻擊主要的解決方法就是轉義。
CSP(Content Security Policy)內容安全策略
用於指定哪些內容可執行
![](https://i.iter01.com/images/eea29b39c0294e179b7f89d10ce4c87d017c4b4fffa476aab082eb3056f5f73f.png)
![](https://i.iter01.com/images/0a092bfbb96ee2938d6bc827d897ee53d7221068819f3cf775ef6835e741f017.png)
那麼前面講的幾種方法:1)內建函式轉義;2)DOM解析白名單;3)第三方庫;4)CSP
CSRF(Cross Site Request Forgy)跨站請求偽造
在其他網站對本網站產生影響。也就是其他網站對目標網站,在使用者不知情的情況下發起了某些請求。
1)如下圖(post請求):寫入一個表單,action為介面,以iframe形式插入,發起請求。
![](https://i.iter01.com/images/01ba771c2e67e1ac6c458d50df0752aa0d664730575c1293a0f85c58fc76b70f.png)
2)如下圖(get請求):以超連結形式讓使用者點選進入網站,其實是傳送了一個get請求。
![](https://i.iter01.com/images/2ef1e6a79c92fbcb361bc8ade14ea0be6d2b0dd27f72832dd6ca5f52dc529f64.png)
也就是所謂的網路蠕蟲,擴散範圍非常之大。
CSRF攻擊原理:
![](https://i.iter01.com/images/51dc8e0c0ad0d75a5062280de64f286e8f16d585e57562b90e2a01b0d93f5d72.png)
csrf攻擊危害
利用使用者登陸態,使用者不知情,完成業務請求,盜取使用者資金(轉賬、消費),冒充使用者發帖背鍋,損壞網站名譽。
CSRF攻擊如何進行防禦?
![](https://i.iter01.com/images/eb5c25882abf98aa550d93953d8d2c529f6a72573deae3c889768dda065d37b9.png)
![](https://i.iter01.com/images/a159783806756a8443f673d06a9fc2234748805a47144a55cbdbe2c259b656d5.png)
在響應Response Headers裡面Set-Cookies:sameSite=strict這個屬性,目前相容性Chrome支援這種防禦方式。
在前端頁面加入驗證資訊
前面說過CSRF攻擊有幾個特徵,在訪問目標網站後端的時候並不會訪問目標網站的前端。那麼我們在A網站的前端加一些驗證資訊,這些資訊只有在A網站的前端獲得這些資訊,如果不經過A網站前端是無法獲得這些資訊,那麼無法驗證成功的。
1)驗證碼<圖形驗證碼ccap>;
2)token;
referer為B網站(來自攻擊網站)
包含這個請求是來自哪裡的資訊請求頭。 驗證referer,禁止來自第三方網站請求。
![](https://i.iter01.com/images/372016cd520b936feeb68c0428ad491a5aa0f7c7f980d8a2fc045a679e46b77a.png)
利用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 (把使用者資料放在記憶體中的,通過給前端傳送一個隨機字串相當於一個標示,前端是不需要儲存的再次請求只需要帶上這個標示,就能夠在記憶體中把之前的資料找出,會話)
![](https://i.iter01.com/images/13ba2b6379713eafe51fbf1bb375b4b3ea9394ecc296e69a5c5a76567b4719e6.png)
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禁止內嵌。
![](https://i.iter01.com/images/feb629182a135ee0fccf2bb61d6be587b226cca48519c8520cb6a4e8d6bd0221.png)
![](https://i.iter01.com/images/712753b93dadbda8ad8d0f68b114518ae19aa5a24b9612d53147ab1cec28a417.png)
![](https://i.iter01.com/images/c26dce56dc24dba88e5edfa76f9295aae33c1f0c2b66d737c33cacc179a8ee43.png)
HTTP竊聽:
竊聽使用者密碼,竊聽傳輸敏感資訊,非法獲取個人資料。
HTTP篡改:
接入廣告,重定向網站,無法防禦的XSS和CSRF攻擊。
運營商劫持.....
HTTS
![](https://i.iter01.com/images/3ca1222d0a1a9fd1e2dcc3dcedd17d7a5c440266bffdadeb5dd02f7e2c7bc9ec.jpg)
![](https://i.iter01.com/images/9a91f1fe251ab8a4affcb5f4a283dc736e5b2bdc4e9a62f6d7ae9a893476e425.jpg)
密碼安全
密碼的作用,密碼的儲存,密碼的傳輸,密碼的替代方案,生物特徵密碼的密碼(指紋、人臉等)。
密碼-洩露渠道:
資料庫被偷,伺服器被入侵,通訊被竊聽,內部人員洩露資料,其他網站的密碼(撞庫)。
密碼-儲存:
嚴禁密碼銘文儲存(防洩露),單向變換(防洩露),變換複雜度要求(防猜解),密碼複雜度要求(防猜解),加鹽(防猜解)
密碼-雜湊演算法:
明文-密文----一一對應,雪崩效應,密文-銘文無法反推,密文固定長度。
常見雜湊演算法:
md5,sha1,sha256。
密碼-單向變換彩虹表
![](https://i.iter01.com/images/f9b18bafc4966043c81dd8e5d5c3b5ab0b577a38082dd5cb906f627acbd4c482.jpg)
密碼-密碼傳輸的安全性:
https傳輸,頻率限制,前端加密意義有限。
密碼生物特性密碼:
私密性-容易洩露,安全性-碰撞,唯一性-終身唯一-無法修改。
上傳問題
1.上傳檔案。2.再次訪問上傳的檔案。3.上傳的檔案被當成程式解析。
上傳問題防禦:
1.限制上傳字尾。2.檔案型別檢查。3.檔案內容檢查。4.程式輸出。5.許可權-可寫可執行互斥。
資訊洩露
洩露系統敏感資訊,洩露使用者敏感資訊,洩露密碼。
資訊洩露的途徑:錯誤資訊失控,SQL隱碼攻擊,水平許可權控制不當,XSS/CSRF。。。
拒絕服務攻擊DOS
模擬正常使用者,大量佔用伺服器資源,無法服務正常使用者,TCP半連結,Http連結,DNS
大規模分散式拒絕服務攻擊DDOS