溫馨提示×

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

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

如何理解因防火墻而學(xué)習(xí)的Content-Type

發(fā)布時(shí)間:2021-10-19 16:26:45 來(lái)源:億速云 閱讀:146 作者:柒染 欄目:大數(shù)據(jù)

如何理解因防火墻而學(xué)習(xí)的Content-Type,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

背景

項(xiàng)目在B學(xué)校上線的時(shí)候,同一個(gè)功能在A學(xué)校是沒(méi)問(wèn)題,B學(xué)校前端點(diǎn)擊后,后端一直收不到請(qǐng)求

初步分析

1.確認(rèn)一下代碼都是同一份

2.確認(rèn)是否訪問(wèn)了正確的服務(wù)器

3.確認(rèn)應(yīng)用服務(wù)器是否收到了請(qǐng)求

4.確認(rèn)反向代理服務(wù)器是否收到了請(qǐng)求

5.抓包看請(qǐng)求是否發(fā)出(其實(shí)不用懷疑這一點(diǎn))

以上四步做完之后的結(jié)論是:代碼是同一份,服務(wù)器是對(duì)的,反向代理服務(wù)器和應(yīng)用服務(wù)器都沒(méi)有收到請(qǐng)求

初步診斷結(jié)果

懷疑是B學(xué)校的防火墻攔截了請(qǐng)求,因此可能有兩個(gè)解決方案:
1.找學(xué)校開(kāi)防火墻,設(shè)置白名單

2.想辦法繞開(kāi)防火墻規(guī)則

但是有人得問(wèn)了,為什么防火墻會(huì)攔截喃,因?yàn)樵谖覀儺惒教峤坏臄?shù)據(jù)當(dāng)中含有<p>等富文本標(biāo)簽,這應(yīng)該是防火墻防止XSS攻擊的而設(shè)置的策略,進(jìn)而攔截了請(qǐng)求

因?yàn)楫?dāng)時(shí)事情緊急,且學(xué)校放假?zèng)]人配合,只有先試著用第2點(diǎn)。

解決過(guò)程

之前沒(méi)怎么接觸過(guò)XSS攻擊,對(duì)防火墻的攔截策略沒(méi)什么多少認(rèn)識(shí),接下來(lái)試著在POSTMAN中使用mutipart/formdata提交測(cè)試,居然是成功的。

找到了突破口,然后就讓前端更改默認(rèn)提交請(qǐng)求頭中的Content-Type=mutipart/formdata,然后在VUE中使用FormData構(gòu)造表單提交

至此繞過(guò)了防火墻,上線OK

總結(jié)

不同學(xué)校的防火墻策略不一樣,因此開(kāi)發(fā)人員需要補(bǔ)充WEB安全相關(guān)的知識(shí)點(diǎn),最好是公司的CTO在學(xué)習(xí)整理之后,公司針對(duì)特定行業(yè)現(xiàn)狀弄出一套最佳實(shí)踐出來(lái)

通過(guò)本次實(shí)踐,順便了解了一下Content-Type分別為multipart/formdata和x-www-form-urlencode的請(qǐng)求信息

x-www-form-urlencode

默認(rèn)情況下,html的form表單的enctype=application/x-www-form-urlencoded。一些框架比如Jquery Vue的Ajax提交默認(rèn)也是這種類型

application/x-www-form-urlencoded是指表單的提交,并且將提交的數(shù)據(jù)進(jìn)行urlencode。默認(rèn)情況下,我們所有的表單提交都是通過(guò)這種默認(rèn)的方式實(shí)現(xiàn)的,如圖:

如何理解因防火墻而學(xué)習(xí)的Content-Type

如何理解因防火墻而學(xué)習(xí)的Content-Type

可以看到中文被編碼了,但是它并不會(huì)把特殊字符進(jìn)行編碼,比如< &等。這樣可能會(huì)導(dǎo)致XSS-存儲(chǔ)型攻擊或者SQL注入攻擊。因此防火墻攔截它是正確的。因此寫(xiě)前端代碼的時(shí)候,輸入都需要做校驗(yàn),比如電子郵箱,生日、年齡、文本使用地方的XSS FILTER做過(guò)濾等,同時(shí)后端也要做校驗(yàn),因?yàn)榍岸耸呛苋菀拙屠@過(guò)的。關(guān)于XSS-攻擊可以去看阿里-首席安全架構(gòu)師-吳翰清的《白帽子講WEB安全》一書(shū)

multipart/form-data

我們?nèi)绻诒韱沃猩蟼魑募话銜?huì)將form的enctype參數(shù)設(shè)置為multipart/form-data,一些框架比如Jquery Vue的Ajax提交也可以設(shè)置Content-Type,這種方式只支持POST的請(qǐng)求方式

Contype-Type=multipart/form-data情況的時(shí)候,都會(huì)通過(guò)一個(gè)特殊的字符串來(lái)將原始POST數(shù)據(jù)進(jìn)行分割。

我們可以看到下面的請(qǐng)求中Content-type的類型

分隔符開(kāi)始為:----WebKitFormBoundaryM2jFeC5L7hYjAqxZ

分隔符結(jié)束為:-----WebKitFormBoundaryM2jFeC5L7hYjAqxZ--

相比較多了“--”

如何理解因防火墻而學(xué)習(xí)的Content-Type

如何理解因防火墻而學(xué)習(xí)的Content-Type通過(guò)這種方式我們把富文本提交到了后端,寫(xiě)入了數(shù)據(jù)庫(kù)。但是為了避免XSS攻擊,前端和后端代碼都可以使用第三方的插件掃描一下文件內(nèi)容或者VALUE值

application/json

是我們將json字符串通過(guò)請(qǐng)求體(http body)向后端提交數(shù)據(jù),springmvc后端直接使用@requestBody進(jìn)行接收,這也是經(jīng)常使用一種方式,并沒(méi)有什么特別的點(diǎn)。同樣需要對(duì)參數(shù)內(nèi)容進(jìn)行過(guò)濾,防止XSS攻擊。

VUE防XSS攻擊

vue前端框架提供了防XSS攻擊的方法,可以自行網(wǎng)上查閱

看完上述內(nèi)容,你們掌握如何理解因防火墻而學(xué)習(xí)的Content-Type的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI