您好,登錄后才能下訂單哦!
本篇內容主要講解“sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應對”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應對”吧!
SQL注入就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
尋找到SQL注入的位置
判斷服務器類型和后臺數據庫類型
針對不同的服務器和數據庫特點進行SQL注入攻擊
比如,在一個登錄界面,要求輸入用戶名和密碼,可以這樣輸入實現免帳號登錄:
用戶名: ‘or 1 = 1 -- 密 碼:
用戶一旦點擊登錄,如若沒有做特殊處理,那么這個非法用戶就很得意的登陸進去了。這是為什么呢?
下面我們分析一下:從理論上說,后臺認證程序中會有如下的SQL語句:
String sql = “select * from user_table where username=' “+userName+” ' and password=' “+password+” ‘”;
因此,當輸入了上面的用戶名和密碼,上面的SQL語句變成:
SELECT * FROM user_table WHERE username=''or 1 = 1 –- and password=''
分析上述SQL語句我們知道,username=‘ or 1=1 這個語句一定會成功;然后后面加兩個 -,這意味著注釋,它將后面的語句注釋,讓他們不起作用。這樣,上述語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。
參數綁定
使用預編譯手段,綁定參數是最好的防SQL注入的方法。目前許多的ORM框架及JDBC等都實現了SQL預編譯和參數綁定功能,攻擊者的惡意SQL會被當做SQL的參數而不是SQL命令被執行。在mybatis的mapper文件中,對于傳遞的參數我們一般是使用 # 和$來獲取參數值。 當使用#時,變量是占位符 ,就是一般我們使用javajdbc的PrepareStatement時的占位符,所有可以防止sql注入;當使用 $ 時,變量就是直接追加在sql中,一般會有sql注入問題。
使用正則表達式過濾傳入的參數
它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。
XSS的攻擊方式就是想辦法“教唆”用戶的瀏覽器去執行一些這個網頁中原本不存在的前端代碼。
我們常用的留言板就可以產生XSS攻擊(持久性),我們知道留言板通常的任務就是把用戶留言的內容展示出來。
正常情況下,用戶的留言都是正常的語言文字,留言板顯示的內容也就沒毛病。
然而這個時候如果有人不按套路出牌,在留言內容中丟進去一行:
<script>alert(“這是一個攻擊”)</script>
那么留言板界面的網頁代碼就會變成形如以下:
那么這個時候問題就來了,當瀏覽器解析到用戶輸入的代碼那一行時會發生什么呢?
答案很顯然,瀏覽器并不知道這些代碼改變了原本程序的意圖,會照做彈出一個信息框。就像這樣:
<html> <head> <title>留言板</title> </head> <body> <div id=”board” <script>alert(“這是一個攻擊”)</script> </div> </body> </html>
攻擊者注入的數據反映在響應中,一個典型的非持久性XSS攻擊包含一個帶XSS攻擊向量的鏈接(每次攻擊需要用戶點擊)
比如: 正常發送消息:
//www.test.com/message.php?send=Hello,World!
非正常發送消息: 接收者接收消息顯示的時候將會彈出警告窗口
http://www.test.com/message.php?send=<script>alert(‘foolish!')</script>!
XSS攻擊的主要原因就是過于信任客戶端提交的數據。
解決方法是不信任任何客戶端提交的數據,只要是客戶端提交的數據就應該先進行相應的過濾處理然后方可進行下一步的操作。
將重要的cookie標記為http only, 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了(如果在cookie中設置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊);
表單數據規定值的類型,例如:年齡應為只能為int、name只能為字母數字組合
對數據進行Html Encode 處理(對HTML轉義)
過濾或移除特殊的Html標簽,例如: < script >, < iframe > , < for <, > for>, ” for
過濾JavaScript 事件的標簽,例如 “οnclick=”, “onfocus” 等等
**需要注意的是:
**在有些應用中是允許html標簽出現的,甚至是javascript代碼出現。因此,我們在過濾數據的時候需要仔細分析哪些數據是有特殊要求(例如輸出需要html代碼、javascript代碼拼接、或者此表單直接允許使用等等),然后區別處理!
CORS是一個W3C標準,全稱是”跨域資源共享”(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。
Cors漏洞就是攻擊者利用Cors技術來獲取用戶的敏感數據,從而導致用戶敏感信息泄露。
CORS請求可分為兩類:
請求方式為GET,POST,HEAD這三種之一,并且HTTP頭不超出(Accept,Accept-Language,Content-Language,Lat-Event-ID,Content-Type)這幾種字段。Origin字段用來說明,本次請求來自哪個源(協議 + 域名 + 端口)
GET /cors HTTP/1.1 Origin: http://api.bob.com Host: api.alice.com Accept-Language: en-US Connection: keep-alive User-Agent: Mozilla/5.0…
當瀏覽器發現服務器的請求為簡單請求時,會在頭信息里加入Origin字段。Origin字段代表此次請求來自哪個域,服務器就可以檢驗是否來自該域。
如果匹配,服務器就會在響應里增添三個字段:
1.Access-Control-Allow-Origin
2.Access-Control-Allow-Credentials
3.Access-Control-Expose-Headers
其中 Access-Control-Allow-Origin是必須有的,而剩下兩個可有可無。Access-Control-Allow-Origin字段代表允許哪個域訪問。
當字段值為‘*’時,就代表任意域都可以訪問,這樣,就導致了Cors漏洞的產生(可被截取到用戶信息)。
非簡單請求是那種對服務器有特殊要求的請求,比如請求方法是PUT或DELETE,或者Content-Type字段的類型是application/json。
非簡單請求的CORS請求,會在正式通信之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight) 瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。
只有得到肯定答復,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。
解決:
1.不要將Access-Control-Allow-Origin字段設置為*
2.嚴格校驗Origin字段的值
3.HTTPS 網站不要信任HTTP 域
4.不要信任全部自身子域,減少攻擊面
到此,相信大家對“sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應對”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。