2013-11-22 74 views
0

我試圖爲自己做一個小型的XSS演示,但它不像預期的那樣工作。我有一個輸入框和一個按鈕。單擊該按鈕將在div中顯示輸入框的值。這是我寫的onclick回調:爲什麼這不是xss脆弱?

var showInput = function() 
{ 
var field = document.getElementById("field1"); 
var box = document.getElementById("displayArea"); 
box.innerHTML = field.value; 
} 

當我< script>alert("XSS!");< /script>在框中鍵入,點擊按鈕,沒有任何顯示並沒有任何反應。我理解XSS錯了嗎?任何人都可以舉一個簡單的例子來說明一些容易受到攻擊

回答

2

這將只是將代碼插入頁面「暫時」,並不會執行它。如果您重新加載頁面,它將不再在頁面源代碼中。 如果你想要這個工作,你可以嘗試用一個簡單的PHP代碼做到這一點:

xss.php

<?php 
echo $_GET['xss']; 
?> 

然後,如果你訪問這個頁面有JS代碼爲GET參數,它會執行代碼:

localhost/xss.php?xss=<script>alert('XSS!');</script> 

這將工作,因爲該腳本將被實際呈現之前「插入」您的頁面。

4

分配給.innerHTML不執行<script>標籤。爲了動態創建腳本,您必須使用document.createElement('script')

var script = document.createElement('script'); 
script.innerHTML = field.value; 
box.appendChild(script); 

DEMO

+0

這不是xss真的嗎?如果你像這樣寫回調,看起來你實際上想要執行代碼。 – kodu

+0

我認爲他只是好奇如何以一種將被執行的方式注入腳本。它是否是「跨站點」取決於腳本的來源。 – Barmar

1

您的原始代碼仍然有一個基於DOM的XSS。現代瀏覽器在分配給innerHTML時不會執行腳本標記。但是,他們仍然很容易通過事件處理程序。例如,如果你的輸入是:<img src=nonexistent onerror=alert(1)>那麼你會得到一個彈出如你所期待的。

相關問題