2013-02-28 80 views
5

我正在測試一個Web應用程序。我想編寫一個XSS腳本,它將顯示一個警報"Hello"Cross Site腳本注入

我寫的第一個劇本:

<script >alert("Hello");</script > 

但並未顯示警報"Hello"。我發現XSS腳本的工作原理是

<SCRIPT >alert(String.fromCharCode(72,101,108,108,111,33))</SCRIPT > 

我想知道爲什麼第一個腳本沒有工作。

+0

如果您想了解更多關於XSS混淆,我可以建議你[XSS過濾器逃避祕籍](https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet)。 – Eich 2013-02-28 12:58:56

+0

我不確定你爲什麼還沒有接受答案。它看起來很穩固。 – SoonDead 2013-03-06 16:19:18

回答

7

該網站很可能會用HTML實體替換雙引號,或者嘗試以其他方式將它們轉義,導致它們不適合用於JavaScript。 使用String.fromCharCode(...)時,您不必使用任何引號,因此它將起作用。它獲取字符串字符的ASCII代碼列表,並在運行時創建一個字符串。所以不需要任何引用。

避免這種XSS的正確方法是用&lt;取代< - 這樣腳本標記根本無法創建。

請注意,在清理包含HTML的數據時,>,"&也應替換爲其各自的HTML實體!然而,只有<是絕對需要打敗XSS攻擊假設可以在HTML中使用任何不可信的數據屬性(這就是"需求將被拆除)

+0

是@ThiefMaster,網站將第一個腳本中的「Hello」更改爲\「Hello \」。我想知道爲什麼網站這樣做。另外,我想知道'String.fromCharCode(72,101,108,108,111,33)'如何顯示Hello! – IBK 2013-02-28 12:53:10

+0

'String.fromCharCode'是一個普通的JavaScript方法(解釋[這裏](http://www.w3schools.com/jsref/jsref_fromcharcode.asp))。您可以在'