2011-05-03 86 views
1

我剛纔注意到,您可以通過使用字符串常量之間劃在JavaScript讓XSS攻擊:使用字符串文字之間的破折號在JavaScript

即:

var foo = 'bar'-alert(1)-'baz'; 
//this will display the alert 

我的問題是,什麼做那裏的js口譯員? 這是什麼意思使用類似破折號? 我認爲它只是一個aritmetic操作符。

----- ----- UPDATE

對不起,我沒有解釋的XSS攻擊的真實語境:

我同意,警告(1)不看非常有害。但實際上,我是通過使用Burp Suite 進行的安全掃描得到的。主機正在竊聽我,但我建議將其作爲誤報漏洞。

無論如何,我使用的是查詢字符串參數redirección

echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>'; 

攻擊者可能會插入一個匿名函數:

http://mysite.com/foo.php?returnto=bar.php 

它也用JavaScript製作在那裏,通過改變之前重定向:

http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-' 

的結果將是:

<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script> 

,確實,得到excecuted功能(取決於PHP避開功能的質量)。

+2

你能演示如何這可能會導致在XSS攻擊?我還不確定。 – 2011-05-03 21:45:07

+0

是的,我已經更新了我的問題 – dami 2011-05-04 01:02:45

回答

5

解釋器只是簡單地鑄造每個子表達式來試圖形成一個數學表達式。

相反的:

var foo = 1 - 2 - 1;

你有一個最終成爲一種表達:

var foo = NaN - NaN - NaN;

這就是爲什麼fooNaN

+0

Oeh猶如XSS攻擊!謹防NaN,我總是說。 – Rudie 2011-05-03 22:04:10

+0

geez,我看到這是一個愚蠢的問題。謝謝! – dami 2011-05-04 00:22:29

+0

@dami:沒問題。如果你發現我的答案可以接受,你可以「檢查」它是否被接受。謝謝。 – z5h 2011-05-04 14:05:31

0

alert()不執行,因爲它在字符串中劃線,而是因爲你bar後關閉的字符串,「減去」的alert()從它的回報,從它的字符串baz減去。所以函數alert()將始終被調用。如果你不希望它發生,只是不關閉並重新打開字符串:

var foo = 'bar-alert(1)-baz'; 

其實,我看不出它如何可能導致XSS攻擊。傳遞給你的代碼的任何字符串實際上都是上面那個字符串。

相關問題