常見安全問題
跨站腳本攻擊XSS
跨站請求偽造攻擊CSRF
前端Cookies安全性
點擊劫持攻擊
傳輸過程安全問題
用戶密碼安全問題
SQL注入攻擊
XSS(Cross Site Scripting)跨站腳本攻擊介紹
什么是XSS
web攻擊的一種,通過對網頁注入可執行代碼(html代碼或JS代碼)成功被瀏覽器執行
實施XSS攻擊具備的條件
- 需要向web頁面能夠注入惡意代碼(輸入框、url)
- 惡意代碼能夠被瀏覽器成功執行
XSS攻擊原理
用戶傳入的數據被當做是程序,所以會執行程序
XSS能干嘛
- 獲取頁面數據:通過document即可獲取指定元素的值,如獲取用戶名稱、手機號、住址等【偷取網站任意數據包括用戶資料】
- 獲取cookies:通過document.cookies可以獲取網站當前的所有cookies,盜取當前登錄用戶的登錄態,從而冒充被盜用戶登錄網站甚至后台管理系統【偷取用戶密碼和登錄態】
- 劫持前端邏輯:可以修改某個操作的反饋內容,譬如點擊某個按鈕本來應該只提交一個請求,但通過XSS腳本可篡改該請求地址,然后用戶提交的信息發送到攻擊者封裝的接口;或可改變用戶跳轉的頁面【欺騙用戶,流量劫持】
- 發送請求:攻擊者可以讓用戶在不知情的情況下發送某個請求收集用戶信息
XSS攻擊方式
- 反射型XSS:用戶訪問一個被攻擊者篡改后的鏈接時,被植入的腳本會被用戶瀏覽器執行,也稱非持久型因為是一次性,僅對當次的頁面訪問產生影響
- 反射型XSS場景:帶有XSS腳本的鏈接轉成的短鏈;【在url后跟xss腳本】,網址跳轉
- 存儲型XSS:包含XSS攻擊腳本的內容會被存儲到服務器端,也稱持久型,用戶讀取到內容時會自動執行腳本
- 存儲型XSS場景:其他用戶查看別人發布的留言、評論,管理員發布的公告,黑客發布的博客文章;反饋功能,投訴功能,聊天記錄功能
XSS攻擊注入點
- HTML節點內容:動態生成,包含用戶輸入的內容,從而包含XSS腳本
- HTML屬性:像img的src、輸入框的value等需要用戶自行輸入的地方
- JS代碼:某個JS代碼需要用戶傳值進入
- 富文本:富文本編輯框本身保存的內容就包含html標簽,用戶可輸入XSS腳本
潛在注入點
判斷輸入點是否可以成功把數據注入到頁面內容,對於提交數據內容但是不輸出到頁面的輸入點是沒有必要進行Fuzzing的,因為即使可以提交攻擊代碼,也不會產生XSS;
Fuzzing:模擬XSS攻擊,模糊測試挖漏洞最常用的一種手段,不斷嘗試的過程
Payload:相當於測試用例
標簽屬性中: 如<a href="注入位置">test</a>, Payload:"></a><script>alert(0)</script><a href="
標簽事件中: <img href="a.jpg" onload="注入位置">, Payload:alert(0)
防御XSS攻擊
- 瀏覽器自帶防御,X-XSS-Protection,主要防御反射型XSS攻擊,如參數出現在HTML內容和屬性
- 對html內容進行轉義,譬如將【<>】轉義成< > 存入數據庫時即轉義,或顯示時轉義
- 對html屬性中的雙引號和單引號【"" ''】轉義成&quto; '
- CSP1(Content SecurityPolicy)內容安全策略,用於指定哪些內容可執行
CSRF(Cross Site Request Forgy)跨站請求偽造
通俗易懂的理解CSRF
- 用戶訪問的網站對惡意網站發出了一些請求,且這些請求是用戶不知情的情況下完成的
- 攻擊者盜用受信任用戶的身份,以他的名義向第三方網站發送惡意請求,對於服務器來說這個請求時合法的
CSRF攻擊原理
CSRF是如何攻擊的?又如何防御
- 站點B向站點A發送請求
- 請求帶站點Acookies
- 不訪問站點A前端
- referer為站點B
CSRF攻擊危害
- 利用用戶登錄態
- 用戶不知情
- 完成業務請求(盜取用戶資金、冒充用戶發帖背鍋)
- 造成蠕蟲攻擊