Day 141/200 關(guān)于XSS(含反射性)防護(hù)的整理(仍需迭代)

1出嘹、攻擊是什么意思?

拿到本不該被拿到的隱私的信息咬崔。

比如税稼,用戶的登錄狀態(tài);竊取 Cookie 信息垮斯;監(jiān)聽用戶行為郎仆;修改 DOM;

其他攻擊類型還有:

(1)網(wǎng)絡(luò)釣魚兜蠕,包括盜取各類用戶賬號(hào)扰肌;

(2)竊取用戶cookies資料,從而獲取用戶隱私信息熊杨,或利用用戶身份進(jìn)一步對(duì)網(wǎng)站執(zhí)行操作曙旭;

(3)劫持用戶(瀏覽器)會(huì)話,從而執(zhí)行任意操作晶府,例如進(jìn)行非法轉(zhuǎn)賬桂躏、強(qiáng)制發(fā)表日志、發(fā)送電子郵件等川陆;

(4)強(qiáng)制彈出廣告頁面剂习、刷流量等;

(5)網(wǎng)頁掛馬较沪,進(jìn)行惡意操作鳞绕,例如任意篡改頁面信息、刪除文章等尸曼;

(6)進(jìn)行大量的客戶端攻擊猾昆,如DDoS攻擊;

(7)獲取客戶端信息骡苞,例如用戶的瀏覽歷史、真實(shí)IP、開放端口等解幽;

(8)控制受害者機(jī)器向其他網(wǎng)站發(fā)起攻擊贴见;

(9)結(jié)合其他漏洞,如CSRF漏洞躲株,實(shí)施進(jìn)一步作惡片部;

(10)提升用戶權(quán)限,包括進(jìn)一步滲透網(wǎng)站霜定;

(11) 傳播跨站腳本蠕蟲等档悠;


2、XSS攻擊的定義望浩?

1)定義:(Croess SiteScripting)XSS意思是跨站腳本攻擊(腳本代碼注入)辖所。

2)大致分為三種類型 :Persistent型(持久型),Non-persistent(反射型)及Dom-based型(區(qū)別是是否通過 HTTP 請(qǐng)求數(shù)據(jù))磨德。

反射型是最常用缘回,也是使用得最廣的一種攻擊方式。它通過給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL典挑,當(dāng)URL地址被打開時(shí)酥宴,特有的惡意代碼參數(shù)被HTML解析、執(zhí)行您觉。它的特點(diǎn)是非持久化拙寡,必須用戶點(diǎn)擊帶有特定參數(shù)的鏈接才能引起。


示例


實(shí)際邏輯


3琳水、什么是CGI?

公共網(wǎng)關(guān)接口(Common Gateway Interface炫刷,CGI)是Web 服務(wù)器運(yùn)行時(shí)外部程序的規(guī)范擎宝,按CGI 編寫的程序可以擴(kuò)展服務(wù)器功能。CGI 應(yīng)用程序能與瀏覽器進(jìn)行交互浑玛,還可通過數(shù)據(jù)API與數(shù)據(jù)庫服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信绍申,從數(shù)據(jù)庫服務(wù)器中獲取數(shù)據(jù)。格式化為HTML文檔后顾彰,發(fā)送給瀏覽器极阅,也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫中。幾乎所有服務(wù)器都支持CGI涨享,可用任何語言編寫CGI筋搏,包括流行的C、C ++、Java箕别、VB 和Delphi 等。

CGI分為標(biāo)準(zhǔn)CGI和間接CGI兩種疚顷。標(biāo)準(zhǔn)CGI使用命令行參數(shù)或環(huán)境變量表示服務(wù)器的詳細(xì)請(qǐng)求髓迎,服務(wù)器與瀏覽器通信采用標(biāo)準(zhǔn)輸入輸出方式峦朗。間接CGI又稱緩沖CGI,在CGI程序和CGI接口之間插入一個(gè)緩沖程序排龄,緩沖程序與CGI接口間用標(biāo)準(zhǔn)輸入輸出進(jìn)行通信



4波势、XSS測試方法

1、工具掃描:APPscan橄维、AWVS

2尺铣、手工測試:Burpsuite、firefox(hackbar)争舞、XSSER XSSF

使用手工檢測Web應(yīng)用程序是否存在XSS漏洞時(shí)凛忿,最重要的是考慮那里有輸入,輸入的數(shù)據(jù)在什么地方輸出兑障。在進(jìn)行手工檢測XSS時(shí)侄非,人畢竟不像軟件那樣不知疲憊,所以一定要選擇有特殊意義的字符流译,這樣可以快速測試是否存在XSS逞怨。

(1)在目標(biāo)站點(diǎn)上找到輸入點(diǎn),比如查詢接口,留言板等;

(2)輸入一組"特殊字符+唯一識(shí)別字符",點(diǎn)擊提交后,查看返回的源碼,是否有做對(duì)應(yīng)的處理;

(3)通過搜索定位到唯一字符,結(jié)合唯一字符前后語法確認(rèn)是否可以構(gòu)造執(zhí)行js的條件(構(gòu)造閉合);提交構(gòu)造的腳本代碼,看是否可以成功執(zhí)行,如果成功執(zhí)行則說明存在XSS漏洞;


5、如何防御福澡?

XSS防御的總體思路是:對(duì)輸入(和URL參數(shù))進(jìn)行過濾叠赦,對(duì)輸出進(jìn)行編碼

1革砸、DOM 節(jié)點(diǎn)內(nèi)容進(jìn)行轉(zhuǎn)義

對(duì)于一些標(biāo)簽的 < 和 > 進(jìn)行轉(zhuǎn)移除秀,是他們?cè)?HTML 中不會(huì)以一個(gè) script 標(biāo)簽形式執(zhí)行。

主要的思路就是將容易導(dǎo)致XSS攻擊的邊角字符替換成全角字符算利。< 和 > 是腳本執(zhí)行和各種html標(biāo)簽需要的册踩,比如 ,& 和 # 以及 % 在對(duì)URL編碼試圖繞過XSS filter時(shí)效拭,會(huì)出現(xiàn)暂吉。我們說對(duì)輸入的過濾分為白名單和黑名單。上面的XSS filter就是一種黑名單的過濾缎患,黑名單就是列出不能出現(xiàn)的對(duì)象的清單慕的,一旦出現(xiàn)就進(jìn)行處理。還有一種白名單的過濾挤渔,白名單就是列出可被接受的內(nèi)容肮街,比如規(guī)定所有的輸入只能是“大小寫的26個(gè)英文字母和10個(gè)數(shù)字,還有-和_”判导,所有其他的輸入都是非法的嫉父,會(huì)被拋棄掉沛硅。很顯然如此嚴(yán)格的白名單是可以100%攔截所有的XSS攻擊的。但是現(xiàn)實(shí)情況一般是不能進(jìn)行如此嚴(yán)格的白名單過濾的熔号。

對(duì)于輸入稽鞭,處理使用XSS filter之外,對(duì)于每一個(gè)輸入引镊,在客戶端和服務(wù)器端還要進(jìn)行各種驗(yàn)證,驗(yàn)證是否合法字符篮条,長度是否合法弟头,格式是否正確。在客戶端和服務(wù)端都要進(jìn)行驗(yàn)證涉茧,因?yàn)榭蛻舳说尿?yàn)證很容易被繞過赴恨。其實(shí)這種驗(yàn)證也分為了黑名單和白名單。黑名單的驗(yàn)證就是不能出現(xiàn)某些字符伴栓,白名單的驗(yàn)證就是只能出現(xiàn)某些字符伦连。盡量使用白名單。

2钳垮、DOM 節(jié)點(diǎn)的處理

對(duì)于 DOM 節(jié)點(diǎn)影響比較大的就是單引號(hào)和雙引號(hào)惑淳, 因?yàn)樗麄儠?huì)關(guān)閉屬性的值。所以也是對(duì)單引號(hào)和雙引號(hào)進(jìn)行字符轉(zhuǎn)義饺窿。

3歧焦、JavaScript 代碼的處理

對(duì)于避免造成 javascript 注入的情況,一般會(huì)對(duì)從 url 上取到的數(shù)據(jù)進(jìn)行 encode 肚医,這樣就可以避免雙引號(hào)提前封閉绢馍。

只是這里也要注意一下 ,這里一般會(huì)使用 encode 的方式格式化參數(shù)會(huì)更好一些肠套,不然也要考慮類似 \" 這樣的雙引號(hào)轉(zhuǎn)義符舰涌,是不是會(huì)和 下一個(gè) " 又相互抵消。 當(dāng)然你稚,解決的方法還是給 \ 做轉(zhuǎn)義瓷耙。

4、富文本配置白名單

在富文本中入宦,可以其實(shí)可以使用配置黑白名單的方法哺徊,配置禁止某些標(biāo)簽出現(xiàn)或者是只允許某些標(biāo)簽出現(xiàn)。

但更多時(shí)候建議使用的還是白名單乾闰,因?yàn)榕渲煤诿麊螌?shí)在是太麻煩了而且一旦漏了落追,問題也就大了。網(wǎng)上已經(jīng)有一些庫可以使用涯肩,但是這些庫是別人寫的轿钠,可能有些地方不是自己想要的巢钓。所以,如果想完全定制那么就是使用白名單配置疗垛,如果只是一個(gè)小需求症汹,快速開發(fā)影響也不大,那就可以考慮引用個(gè)庫贷腕。

5背镇、CSP(據(jù)說最有效防御手段,需驗(yàn)證)

前面說的一些防御方法是有效果泽裳,但是始終還是遠(yuǎn)遠(yuǎn)不夠瞒斩。所以,現(xiàn)在防御XSS 有一個(gè)更好的方法就是使用 CSP 規(guī)則涮总。

CSP 概念

CSP 即 content security policy 內(nèi)容安全策略胸囱,是一個(gè) HTTP header ,用于指定哪些內(nèi)容可以執(zhí)行瀑梗。

CSP 規(guī)則

child-src connect-src default-src...

child-src:指定一些子頁面元素烹笔,比如 ifame 。

connect-src :指定網(wǎng)絡(luò)請(qǐng)求比如 ajax 的請(qǐng)求抛丽。

default-src:默認(rèn)規(guī)則谤职,當(dāng)其他規(guī)則沒有配置時(shí),會(huì)直接讀取這里铺纽。

font-src ifame-src img-src

font-src:指定字體源柬帕。

ifame-src:指定 ifame 的訪問域。

img-src:指定 圖片資源的訪問域狡门。

script-src style-src

script-src :指定腳本訪問域

style-src:指定樣式文件訪問域

配置方法

http.set(`content-security-policy`,`default-src 'self'`);

上面這個(gè)意思就是允許當(dāng)前域下的任意請(qǐng)求陷寝。 至于詳細(xì)配置,可以參考 其馏,https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP?這個(gè)說明凤跑。

6、對(duì)輸出進(jìn)行編碼

1>?作為body文本輸出叛复,作為html標(biāo)簽的屬性輸出:

比如:

<span>${username}</span>, <p><c:out value="${username}"></c:out></p>

<input type="text" value="${username}" />

此時(shí)的轉(zhuǎn)義規(guī)則如下:

< 轉(zhuǎn)成 &lt;

> 轉(zhuǎn)成 &gt;

& 轉(zhuǎn)成 &amp;

" 轉(zhuǎn)成 &quot;

' 轉(zhuǎn)成 &#39

2>?javascript事件

<input type="button" onclick='go_to_url("${myUrl}");' />

除了上面的那些轉(zhuǎn)義之外仔引,還要附加上下面的轉(zhuǎn)義:

\ 轉(zhuǎn)成 \\

/ 轉(zhuǎn)成 \/

; 轉(zhuǎn)成 ;(全角;)

3>?URL屬性

如果 <script>, <style>, <imt> 等標(biāo)簽的 src 和 href 屬性值為動(dòng)態(tài)內(nèi)容褐奥,那么要確保這些url沒有執(zhí)行惡意連接咖耘。

確保:href 和 src 的值必須以 http://開頭,白名單方式撬码;不能有10進(jìn)制和16進(jìn)制編碼字符儿倒。

7、HttpOnly 與 XSS防御

XSS 一般利用js腳步讀取用戶瀏覽器中的Cookie,而如果在服務(wù)器端對(duì) Cookie 設(shè)置了HttpOnly 屬性夫否,那么js腳本就不能讀取到cookie彻犁,但是瀏覽器還是能夠正常使用cookie。

一般的Cookie都是從document對(duì)象中獲得的凰慈,現(xiàn)在瀏覽器在設(shè)置 Cookie的時(shí)候一般都接受一個(gè)叫做HttpOnly的參數(shù)汞幢,跟domain等其他參數(shù)一樣,一旦這個(gè)HttpOnly被設(shè)置微谓,你在瀏覽器的 document對(duì)象中就看不到Cookie了森篷,而瀏覽器在瀏覽的時(shí)候不受任何影響,因?yàn)镃ookie會(huì)被放在瀏覽器頭中發(fā)送出去(包括ajax的時(shí) 候)豺型,應(yīng)用程序也一般不會(huì)在js里操作這些敏感Cookie的疾宏,對(duì)于一些敏感的Cookie我們采用HttpOnly,對(duì)于一些需要在應(yīng)用程序中用js操作的cookie我們就不予設(shè)置触创,這樣就保障了Cookie信息的安全也保證了應(yīng)用。

如果你正在使用的是兼容 Java EE 6.0 的容器为牍,如 Tomcat 7哼绑,那么 Cookie?類已經(jīng)有了 setHttpOnly 的方法來使用 HttpOnly 的 Cookie?屬性了。

1cookie.setHttpOnly(true);

設(shè)置完后生成的 Cookie 就會(huì)在最后多了一個(gè) ;HttpOnly

另外使用?Session 的話 jsessionid?這個(gè) Cookie 可通過在?Context?中使用?useHttpOnly 配置來啟用 HttpOnly碉咆,例如:


<Context?path=""?docBase="D:/WORKDIR/oschina/webapp"? ?reloadable="false"?useHttpOnly="true"/>

也可以在?web.xml 配置如下:

<session-config>

?<cookie-config>

??<http-only>true</http-only>

?</cookie-config>

<session-config>

對(duì)于 不支持 HttpOnly 的低版本java ee抖韩,可以手動(dòng)設(shè)置(比如在一個(gè)過濾器中):

String sessionid = request.getSession().getId();?

response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");


8、其他注意點(diǎn)

csp 規(guī)則一般會(huì)在服務(wù)器配置疫铜,當(dāng)然前端頁面也是可以配置茂浮,但是更多的是以服務(wù)器為準(zhǔn),在日常開發(fā)中也經(jīng)常會(huì)遇到引用了第三方的東西壳咕,這個(gè)時(shí)候 csp 規(guī)則不通過席揽,都需要向服務(wù)器端的同學(xué)要求加個(gè)規(guī)則。



參考鏈接

1谓厘、反射型xssDemo?

https://blog.csdn.net/huli870715/article/details/8615473

2幌羞、CGI(通用網(wǎng)關(guān)接口)

https://baike.baidu.com/item/CGI/607810?fr=aladdin&fromid=6717913&fromtitle=%EF%BC%A3%EF%BC%A7%EF%BC%A9

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市竟稳,隨后出現(xiàn)的幾起案子属桦,更是在濱河造成了極大的恐慌,老刑警劉巖他爸,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂宾,死亡現(xiàn)場離奇詭異,居然都是意外死亡诊笤,警方通過查閱死者的電腦和手機(jī)系谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏混,“玉大人蔚鸥,你說我怎么就攤上這事惜论。” “怎么了止喷?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵馆类,是天一觀的道長。 經(jīng)常有香客問我弹谁,道長乾巧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任预愤,我火速辦了婚禮沟于,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘植康。我一直安慰自己旷太,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布销睁。 她就那樣靜靜地躺著供璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冻记。 梳的紋絲不亂的頭發(fā)上睡毒,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音冗栗,去河邊找鬼演顾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隅居,可吹牛的內(nèi)容都是我干的钠至。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼军浆,長吁一口氣:“原來是場噩夢啊……” “哼棕洋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乒融,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤掰盘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赞季,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愧捕,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年申钩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了次绘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邮偎,靈堂內(nèi)的尸體忽然破棺而出管跺,到底是詐尸還是另有隱情,我是刑警寧澤禾进,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布豁跑,位于F島的核電站,受9級(jí)特大地震影響泻云,放射性物質(zhì)發(fā)生泄漏艇拍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一宠纯、第九天 我趴在偏房一處隱蔽的房頂上張望卸夕。 院中可真熱鬧,春花似錦婆瓜、人聲如沸快集。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍讨。三九已至,卻和暖如春蒙秒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宵统。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工晕讲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人马澈。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓瓢省,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痊班。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勤婚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 以下題目是根據(jù)網(wǎng)上多份面經(jīng)收集而來的,題目相同意味著被問的頻率比較高涤伐,有問題歡迎留言討論馒胆,喜歡可以點(diǎn)贊關(guān)注。 以下...
    Aniugel閱讀 14,680評(píng)論 1 6
  • XSS[xss] 簡介 XSS凝果,全稱Cross-site scripting祝迂,跨站[1][#fn1]腳本攻擊; 不...
    說叁兩事閱讀 371評(píng)論 0 0
  • 寫在前面 文章內(nèi)容參考自https://twosecurity.io/http://www.4hou.com/we...
    Ackerzy閱讀 5,353評(píng)論 0 9
  • HTML5 新特性器净、語義化 新特性 新的 DOCTYPE 聲明<!DOCTYPE html> 新增 vedio 和...
    翔子丶閱讀 186評(píng)論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月型雳,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落纠俭,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,523評(píng)論 28 53