相信你們在各類技術文章都看到過SQL注入、XSS和CSRF這三個名詞,可是我以爲有一部分人可能並不清楚這三個詞的真正含義。接下來,我就說下這三個名詞的含義,但願對你們能有所幫助。css
SQL注入前端
SQL注入是屬於注入式攻擊,這種攻擊是由於在項目中沒有將代碼與數據(好比用戶敏感數據)隔離,在讀取數據的時候,錯誤的將數據做爲代碼的一部分執行而致使的。web
典型的例子就是當對SQL語句進行字符串拼接的時候,直接使用未轉義的用戶輸入內容做爲變量。這時,只要在sql語句的中間作修改,好比加上drop、delete等關鍵字,執行以後後果不堪設想。sql
說到這裏,那麼該怎麼處理這種狀況呢?三個方面:數據庫
一、過濾用戶輸入參數中的特殊字符,下降風險。瀏覽器
二、禁止經過字符串拼接sql語句,要嚴格使用參數綁定來傳入參數。安全
三、合理使用數據庫框架提供的機制。就好比Mybatis提供的傳入參數的方式 #{},禁止使用${},後者至關因而字符串拼接sql,要使用參數化的語句。框架
總結下,就是要正確使用參數化綁定sql變量。工具
XSS網站
XSS:跨站腳本攻擊,Cross-Site Scripting,爲了和前端的css避免重名,簡稱爲XSS,是指經過技術手段,向正經常使用戶請求的HTML頁面中插入惡意腳本,執行。
這種攻擊主要是用於信息竊取和破壞等目的。好比2011年的微博XSS攻擊事件,攻擊者利用了微博發佈功能中未對action-data漏洞作有效的過濾,在發佈微博信息的時候帶上了包含攻擊腳本的URL,用戶訪問就會加載惡意腳本,致使大量用戶被攻擊。
關於防範XSS上,主要就是經過對用戶輸入的數據作過濾或者是轉義,可使用框架提供的工具類HtmlUtil。另外前端在瀏覽器展現數據的時候,要使用安全的API展現數據。好比使用innerText而不是innerHTML。
CSRF
跨站請求僞造,在用戶並不知情的狀況下,冒充用戶發送請求,在當前已經登陸的web網站上執行惡意操做,好比惡意發帖,修改密碼等。
大體來看,與XSS有重合的地方,前者是黑客盜用用戶瀏覽器中的登陸信息,冒充用戶去執行操做。後者是在正經常使用戶請求的HTML中放入惡意代碼,XSS問題出在用戶數據沒有轉義,過濾;CSRF問題出如今HTTP接口沒有防範不守信用的調用。
防範CSRF的漏洞方式:
一、CSRF Token驗證,利用瀏覽器的同源限制,在HTTP接口執行前驗證Cookie中的Token,驗證經過纔會繼續執行請求。
二、人機交互,例如短信驗證碼、界面的滑塊。
以前在會議上也有一個思考,在人機驗證這塊,若是不用驗證碼的方式,用界面上的滑塊這種方式,並且滑塊仍是第三方的。在APP的註冊、登陸使用這種人機驗證的方式的話,若是第三方出現了問題,那麼本身的APP就徹底崩掉了,發版以後的APP什麼也改不了。
這個問題,大家能想到解決方案嗎?在下一篇文章中,我會說一下討論的結果。
但願這點分享會對每一個讀者有所幫助,若是有什麼好的建議,能夠在留言區告訴我。
這樣的分享我會一直持續,你的關注、轉發和點贊是對我最大的支持,感謝。