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