自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過img URL實(shí)施XSS的解決方案

安全 應(yīng)用安全
今天在整理一些js,9月份的時(shí)候給百姓網(wǎng)支持了markdown,但 UGC 的自由意味著我們要做一些保持措施,比如防XSS攻擊。

今天在整理一些js,9月份的時(shí)候給百姓網(wǎng)支持了markdown,但 UGC 的自由意味著我們要做一些保持措施,比如防XSS攻擊。翻到了9月初寫的一篇郵件。當(dāng)時(shí)的背景是,當(dāng)天上了markdown支持,晚上覺得似乎不太對(duì),結(jié)果 23 點(diǎn)后開始研究 XSS 攻擊。其中有一個(gè)難點(diǎn),如何防止通過外部圖片鏈接進(jìn)行 XSS。我的解決方案在郵件原文做了簡(jiǎn)單的介紹:

通過XSS的方法好多啊,特別是image的方式,而我們今天發(fā)布的viewad markdown支持是可以使用img.src進(jìn)行外鏈的,因此需要考慮這樣的問題,今晚11點(diǎn)多回來(lái)研究了一下,主要可以歸類為以下幾種:

src="javascript:alert(1)"

src="jav ascript:alert(2)"

src="java&#x0script:alert(3)"

src="&#000 ……."

src="上面4中的變種"

src="外部執(zhí)行腳本鏈接" www.hack6.com

Google 了很久,沒有現(xiàn)成所工具,而且對(duì)于第6種的解法都很浪費(fèi)資源,只能自己通過 http://ha.ckers.org/xss.html 上的總結(jié),分析得出了上面幾種類型,在 Markdown parser 中進(jìn)行 xss 類型檢測(cè)支持。還真是多虧了有 ha.ckers 的總結(jié),這個(gè)函數(shù)可以寫得非常簡(jiǎn)單:

function imageXSS($img){

return preg_match('/(?:javascript|jav\s+ascript|\&#\d+|\&#x)/i', $img);

}

而解除第6種XSS方法,判斷外部資源是最麻煩的。

Google 得來(lái)的結(jié)論:總的來(lái)說(shuō)是通過get_headers 和 stream_get_meta_data等取到content-Type的方式來(lái)做,需要我們的服務(wù)器進(jìn)行請(qǐng)求,并且需要分析來(lái)源,再根據(jù)content-Type決定,這樣做會(huì)有一些問題:后端渲染的數(shù)據(jù)要等 header 取過來(lái),即加載圖片后(可能有多個(gè)并且可能非常大),會(huì)阻礙起來(lái)導(dǎo)致渲染非常慢不緩存且每個(gè)圖片都請(qǐng)求,浪費(fèi)服務(wù)器資源。即使是一個(gè)flickr上500px的圖,在我20M的網(wǎng)絡(luò)下加載也要49ms??赡芤徊恍⌒木蜁?huì)導(dǎo)致服務(wù)器掛了(如果圖片多和訪問的人多的話,這個(gè)是不緩存圖片 url 的)。

搞了很久,最終想到preload image的方式,根據(jù)測(cè)試看來(lái),在瀏覽器中只有加載的內(nèi)容是真正的image才會(huì)觸發(fā)圖片的onload事件,那么其實(shí)我們可以利用onload來(lái)解決這樣的問題。這樣我們可以把請(qǐng)求分布給每一個(gè)用戶,而不需要我們?nèi)魏我稽c(diǎn)資源,并且這種方式還會(huì)進(jìn)行并行加載,甚至更提升了viewad的速度。大概需要做下面幾步:

默認(rèn)情況下不加載img的src,而是設(shè)置data-xssimg="圖片地址",檢測(cè)圖片的onload事件,如果沒有觸發(fā)onload則不顯示,不過當(dāng)src為空的時(shí)候,可能在一些瀏覽器會(huì)影響網(wǎng)站的渲染速度,所以在error觸發(fā)的時(shí)候引用了一個(gè)永久緩存的圖片:http://static.baixing.net/images/nopic_small.png。

而這些代碼看起來(lái)如下(已經(jīng)變成一個(gè) jQuery 組件),目前這段代碼已經(jīng)放在 github 上,你可以在這里查看:imagesXSS.js:

~function ($) {

$.fn.imageXSS = function () {

this.each(function () {

var that = $(this),

url = that.data('mdimg'),

img = document.createElement('img');

$(img).on('load', function () {

that.attr('src', url);

})

$(img).on('error', function () {

that.attr('src', 'http://static.baixing.net/images/nopic_small.png');

})

img.src = url;

})

}

$('[data-mdimg]').imageXSS();

}(jQuery);

目前也只能想到這個(gè)點(diǎn)上?;旧蠝y(cè)試過的都沒有問題。線上目前已經(jīng)支持這個(gè)版本。周一回去再提交一個(gè)版本。
 

責(zé)任編輯:藍(lán)雨淚 來(lái)源: 黑客x檔案
相關(guān)推薦

2009-12-30 14:31:57

PPPoA體系

2020-06-08 22:33:42

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)實(shí)施

2014-07-03 10:01:40

XSS漏洞存儲(chǔ)型XSS漏洞

2017-10-10 15:36:50

物聯(lián)網(wǎng)企業(yè)

2013-06-03 14:20:34

2019-03-13 08:43:32

邊緣計(jì)算物聯(lián)網(wǎng)IoT

2021-06-17 10:59:07

物聯(lián)網(wǎng)空間利用IoT

2021-11-29 10:38:05

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)技術(shù)

2023-06-28 06:33:37

2015-03-12 09:33:54

虛擬化解決方案

2010-05-11 11:35:24

虛擬化微軟

2013-11-29 16:00:26

微軟ERP管理軟件

2012-03-21 11:11:37

ibmdw

2010-08-16 14:34:42

SAS商業(yè)智能數(shù)據(jù)庫(kù)

2013-11-12 17:42:06

殼牌JDA解決方案

2010-05-21 14:24:18

2016-09-27 21:14:53

JavaURL

2013-03-01 11:11:21

華為解決方案企業(yè)認(rèn)證

2015-09-15 17:03:18

2011-10-18 11:19:51

惠普云計(jì)算數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)