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

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

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

SQL注入

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

SQL注入攻擊的總體思路:

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

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

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

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

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

下面我們分析一下:從理論上說,后臺認(rèn)證程序中會有如下的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è)語句一定會成功;然后后面加兩個(gè) -,這意味著注釋,它將后面的語句注釋,讓他們不起作用。這樣,上述語句永遠(yuǎn)都能正確執(zhí)行,用戶輕易騙過系統(tǒng),獲取合法身份。

如何應(yīng)對:

  • 參數(shù)綁定
    使用預(yù)編譯手段,綁定參數(shù)是最好的防SQL注入的方法。目前許多的ORM框架及JDBC等都實(shí)現(xiàn)了SQL預(yù)編譯和參數(shù)綁定功能,攻擊者的惡意SQL會被當(dāng)做SQL的參數(shù)而不是SQL命令被執(zhí)行。在mybatis的mapper文件中,對于傳遞的參數(shù)我們一般是使用 # 和$來獲取參數(shù)值。 當(dāng)使用#時(shí),變量是占位符 ,就是一般我們使用javajdbc的PrepareStatement時(shí)的占位符,所有可以防止sql注入;當(dāng)使用 $ 時(shí),變量就是直接追加在sql中,一般會有sql注入問題。
  • 使用正則表達(dá)式過濾傳入的參數(shù)

XSS攻擊

它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中Web里面的html代碼會被執(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)頁代碼就會變成形如以下:

那么這個(gè)時(shí)候問題就來了,當(dāng)瀏覽器解析到用戶輸入的代碼那一行時(shí)會發(fā)生什么呢?

答案很顯然,瀏覽器并不知道這些代碼改變了原本程序的意圖,會照做彈出一個(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ū)棾鼍娲翱?/p>

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ù)字組合
  • 對數(shù)據(jù)進(jìn)行Html Encode 處理(對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)。因此,我們在過濾數(shù)據(jù)的時(shí)候需要仔細(xì)分析哪些數(shù)據(jù)是有特殊要求(例如輸出需要html代碼、javascript代碼拼接、或者此表單直接允許使用等等),然后區(qū)別處理!

CORS攻擊

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

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

CORS請求可分為兩類:

簡單請求:

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

如果匹配,服務(wù)器就會在響應(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)生(可被截取到用戶信息)。

在這里插入圖片描述

非簡單請求:

非簡單請求是那種對服務(wù)器有特殊要求的請求,比如請求方法是PUT或DELETE,或者Content-Type字段的類型是application/json。

非簡單請求的CORS請求,會在正式通信之前,增加一次HTTP查詢請求,稱為"預(yù)檢"請求(preflight) 瀏覽器先詢問服務(wù)器,當(dāng)前網(wǎng)頁所在的域名是否在服務(wù)器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。

只有得到肯定答復(fù),瀏覽器才會發(fā)出正式的XMLHttpRequest請求,否則就報(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論