欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

帶你理解什么是sql注入攻擊、xss攻擊和cors攻擊

 更新時(shí)間:2023年04月18日 10:35:40   作者:龍崎流河  
這篇文章主要介紹了帶你理解什么是sql注入攻擊、xss攻擊和cors攻擊,網(wǎng)絡(luò)安全問(wèn)題一直是互聯(lián)網(wǎng)開(kāi)發(fā)的重災(zāi)區(qū),今天我們來(lái)認(rèn)識(shí)一下這幾種攻擊方式,需要的朋友可以參考下

SQL注入

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

SQL注入攻擊的總體思路:

  • 尋找到SQL注入的位置
  • 判斷服務(wù)器類(lèi)型和后臺(tái)數(shù)據(jù)庫(kù)類(lèi)型
  • 針對(duì)不同的服務(wù)器和數(shù)據(jù)庫(kù)特點(diǎn)進(jìn)行SQL注入攻擊

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

比如,在一個(gè)登錄界面,要求輸入用戶名和密碼,可以這樣輸入實(shí)現(xiàn)免帳號(hào)登錄:

用戶名: ‘or 1 = 1 --
密 碼:

用戶一旦點(diǎn)擊登錄,如若沒(méi)有做特殊處理,那么這個(gè)非法用戶就很得意的登陸進(jìn)去了。這是為什么呢?

下面我們分析一下:從理論上說(shuō),后臺(tái)認(rèn)證程序中會(huì)有如下的SQL語(yǔ)句:

String sql = “select * from user_table where username=' “+userName+” ' and password=' “+password+” ‘”;

因此,當(dāng)輸入了上面的用戶名和密碼,上面的SQL語(yǔ)句變成:

SELECT * FROM user_table WHERE username=''or 1 = 1 –- and password=''

分析上述SQL語(yǔ)句我們知道,username=‘ or 1=1 這個(gè)語(yǔ)句一定會(huì)成功;然后后面加兩個(gè) -,這意味著注釋?zhuān)鼘⒑竺娴恼Z(yǔ)句注釋?zhuān)屗麄儾黄鹱饔?。這樣,上述語(yǔ)句永遠(yuǎn)都能正確執(zhí)行,用戶輕易騙過(guò)系統(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ù)我們一般是使用 # 和$來(lái)獲取參數(shù)值。 當(dāng)使用#時(shí),變量是占位符 ,就是一般我們使用javajdbc的PrepareStatement時(shí)的占位符,所有可以防止sql注入;當(dāng)使用 $ 時(shí),變量就是直接追加在sql中,一般會(huì)有sql注入問(wèn)題。
  • 使用正則表達(dá)式過(guò)濾傳入的參數(shù)

XSS攻擊

它指的是惡意攻擊者往Web頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的。

XSS的攻擊方式就是想辦法“教唆”用戶的瀏覽器去執(zhí)行一些這個(gè)網(wǎng)頁(yè)中原本不存在的前端代碼。

我們常用的留言板就可以產(chǎn)生XSS攻擊(持久性),我們知道留言板通常的任務(wù)就是把用戶留言的內(nèi)容展示出來(lái)。

正常情況下,用戶的留言都是正常的語(yǔ)言文字,留言板顯示的內(nèi)容也就沒(méi)毛病。

然而這個(gè)時(shí)候如果有人不按套路出牌,在留言?xún)?nèi)容中丟進(jìn)去一行:

<script>alert(“這是一個(gè)攻擊”)</script>

那么留言板界面的網(wǎng)頁(yè)代碼就會(huì)變成形如以下:

那么這個(gè)時(shí)候問(wèn)題就來(lái)了,當(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攻擊的主要原因就是過(guò)于信任客戶端提交的數(shù)據(jù)。

解決方法是不信任任何客戶端提交的數(shù)據(jù),只要是客戶端提交的數(shù)據(jù)就應(yīng)該先進(jìn)行相應(yīng)的過(guò)濾處理然后方可進(jìn)行下一步的操作。

解決的具體方案:

  • 將重要的cookie標(biāo)記為http only, 這樣的話Javascript 中的document.cookie語(yǔ)句就不能獲取到cookie了(如果在cookie中設(shè)置了HttpOnly屬性,那么通過(guò)js腳本將無(wú)法讀取到cookie信息,這樣能有效的防止XSS攻擊);
  • 表單數(shù)據(jù)規(guī)定值的類(lèi)型,例如:年齡應(yīng)為只能為int、name只能為字母數(shù)字組合
  • 對(duì)數(shù)據(jù)進(jìn)行Html Encode 處理(對(duì)HTML轉(zhuǎn)義)
  • 過(guò)濾或移除特殊的Html標(biāo)簽,例如: < script >, < iframe > , < for <, > for>, ” for
  • 過(guò)濾JavaScript 事件的標(biāo)簽,例如 “οnclick=”, “onfocus” 等等

**需要注意的是:

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

CORS攻擊

CORS是一個(gè)W3C標(biāo)準(zhǔn),全稱(chēng)是”跨域資源共享”(Cross-origin resource sharing)。它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請(qǐng)求,從而克服了AJAX只能同源使用的限制。

Cors漏洞就是攻擊者利用Cors技術(shù)來(lái)獲取用戶的敏感數(shù)據(jù),從而導(dǎo)致用戶敏感信息泄露。

CORS請(qǐng)求可分為兩類(lèi):

簡(jiǎn)單請(qǐng)求:

請(qǐng)求方式為GET,POST,HEAD這三種之一,并且HTTP頭不超出(Accept,Accept-Language,Content-Language,Lat-Event-ID,Content-Type)這幾種字段。Origin字段用來(lái)說(shuō)明,本次請(qǐng)求來(lái)自哪個(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)求為簡(jiǎn)單請(qǐng)求時(shí),會(huì)在頭信息里加入Origin字段。Origin字段代表此次請(qǐng)求來(lái)自哪個(gè)域,服務(wù)器就可以檢驗(yàn)是否來(lái)自該域。

如果匹配,服務(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è)可有可無(wú)。Access-Control-Allow-Origin字段代表允許哪個(gè)域訪問(wèn)。

當(dāng)字段值為‘*’時(shí),就代表任意域都可以訪問(wèn),這樣,就導(dǎo)致了Cors漏洞的產(chǎn)生(可被截取到用戶信息)。

在這里插入圖片描述

非簡(jiǎn)單請(qǐng)求:

非簡(jiǎn)單請(qǐng)求是那種對(duì)服務(wù)器有特殊要求的請(qǐng)求,比如請(qǐng)求方法是PUT或DELETE,或者Content-Type字段的類(lèi)型是application/json。

非簡(jiǎn)單請(qǐng)求的CORS請(qǐng)求,會(huì)在正式通信之前,增加一次HTTP查詢(xún)請(qǐng)求,稱(chēng)為"預(yù)檢"請(qǐng)求(preflight) 瀏覽器先詢(xún)問(wèn)服務(wù)器,當(dāng)前網(wǎng)頁(yè)所在的域名是否在服務(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.不要信任全部自身子域,減少攻擊面

到此這篇關(guān)于帶你理解什么是sql注入攻擊、xss攻擊和cors攻擊的文章就介紹到這了,更多相關(guān)sql注入攻擊、xss攻擊和cors攻擊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論