目錄
XSS
XSS
:跨站腳本攻擊,Cross-Site Scripting
,爲了和前端的css
避免重名,簡稱爲XSS
,是指通過技術手段,向正常用戶請求的HTML
頁面中插入惡意腳本,執行。
這種攻擊主要是用於信息竊取和破壞等目的。比如2011年的微博XSS
攻擊事件,攻擊者利用了微博發佈功能中未對action-data
漏洞做有效的過濾,在發佈微博信息的時候帶上了包含攻擊腳本的URL
,用戶訪問就會加載惡意腳本,導致大量用戶被攻擊。
如何防範XSS:
- 主要就是通過對用戶輸入的數據做過濾或者是轉義,可以使用框架提供的工具類
HtmlUtil
。 - 前端在瀏覽器展示數據的時候,要使用安全的API展示數據。比如使用
innerText
而不是innerHTML
。
CSRF
CSRF
跨站點請求僞造(Cross—Site Request Forgery
),跟XSS
攻擊一樣,存在巨大的危害性,你可以這樣來理解:
攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發送郵件、發消息,盜取你的賬號,添加系統管理員,甚至於購買商品、虛擬貨幣轉賬等。
CSRF攻擊攻擊原理及過程如下:
網站A爲存在CSRF
漏洞的網站,網站B爲攻擊者構建的惡意網站,用戶C爲網站A的合法用戶。
- 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
- 在用戶信息通過驗證後,網站A產生
Cookie
信息並返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A; - 用戶未退出網站A之前,在同一瀏覽器中,打開另一個頁面訪問網站B;
- 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;
- 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的情況下攜帶
Cookie
信息,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據用戶C的Cookie
信息以C的權限處理該請求,導致來自網站B的惡意代碼被執行。
如何防範CSRF:
1 Token
驗證,利用瀏覽器的同源限制,在HTTP接口執行前驗證Cookie
中的Token
,驗證通過纔會繼續執行請求。
2、人機交互,例如短信驗證碼、界面的滑塊。
推薦閱讀:
Cookie,Session ,Application是什麼?
實現登錄狀態保持的方法:cookie session token jwt
SQL注入
SQL注入是屬於注入式攻擊,這種攻擊是因爲在項目中沒有將代碼與數據(比如用戶敏感數據)隔離,在讀取數據的時候,錯誤的將數據作爲代碼的一部分執行而導致的。
典型的例子就是當對SQL
語句進行字符串拼接的時候,直接使用未轉義的用戶輸入內容作爲變量。這時,只要在sql
語句的中間做修改,比如加上drop
、delete
等關鍵字,執行之後後果不堪設想。
如何防範SQL注入:
1、過濾用戶輸入參數中的特殊字符,降低風險。
2、禁止通過字符串拼接sql
語句,要嚴格使用參數綁定來傳入參數。
3、合理使用數據庫框架提供的機制。就比如Mybatis
提供的傳入參數的方式 #{}
,禁止使用${}
,後者相當於是字符串拼接sql
,要使用參數化的語句。
總結下,就是要正確使用參數化綁定sql
變量。