溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應(yīng)對(duì)

發(fā)布時(shí)間:2023-04-18 11:46:04 來源:億速云 閱讀:103 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應(yīng)對(duì)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應(yīng)對(duì)”吧!

SQL注入

SQL注入就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。

SQL注入攻擊的總體思路:

  • 尋找到SQL注入的位置

  • 判斷服務(wù)器類型和后臺(tái)數(shù)據(jù)庫類型

  • 針對(duì)不同的服務(wù)器和數(shù)據(jù)庫特點(diǎn)進(jìn)行SQL注入攻擊

SQL注入攻擊實(shí)例:

比如,在一個(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),獲取合法身份。

如何應(yīng)對(duì):

  • 參數(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ù)

XSS攻擊

它指的是惡意攻擊者往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>

非持久 XSS攻擊:

攻擊者注入的數(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)簽,例如 “&omicron;nclick=”, “onfocus” 等等

**需要注意的是:

**在有些應(yīng)用中是允許html標(biāo)簽出現(xiàn)的,甚至是javascript代碼出現(xiàn)。因此,我們?cè)谶^濾數(shù)據(jù)的時(shí)候需要仔細(xì)分析哪些數(shù)據(jù)是有特殊要求(例如輸出需要html代碼、javascript代碼拼接、或者此表單直接允許使用等等),然后區(qū)別處理!

CORS攻擊

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)求:

請(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)字段值為&lsquo;*&rsquo;時(shí),就代表任意域都可以訪問,這樣,就導(dǎo)致了Cors漏洞的產(chǎn)生(可被截取到用戶信息)。

sql注入攻擊、xss攻擊和cors攻擊是什么及怎么應(yīng)對(duì)

非簡單請(qǐng)求:

非簡單請(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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI