8
我正在測試我自己的代碼的xss攻擊。下面的示例是一個簡單的框,用戶可以輸入任何他想要的內容。按下「測試!」後按鈕,JS會顯示輸入的字符串分爲兩個divs.This是我作出更好的解釋我的問題的例子:html()vs innerHTML jquery/javascript和XSS攻擊
<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function testIt(){
var input = document.getElementById('input-test').value;
var testHtml = document.getElementById('test-html');
var testInnerHTML = document.getElementById('test-innerHTML');
$(testHtml).html(input);
testInnerHTML.innerHTML = input;
}
</script>
<head>this is a test</head>
<body>
<input id="input-test" type="text" name="foo" />
<input type="button" onClick="testIt();" value="test!"/>
<div id="test-html">
</div>
<div id="test-innerHTML">
</div>
</body>
,如果你試圖將它複製到一個.html文件並運行它,它會正常工作,但是如果您嘗試輸入<script>alert('xss')</script>
,則只會引發一個警告框:`test-html'div(帶有html()函數)內的警告框。
我真的不明白,爲什麼發生這種情況,而且,檢查與螢火蟲的代碼給了我這樣的結果(注後腳本)
<body>
this is a test
<input id="input-test" type="text" name="foo">
<input type="button" value="test!" onclick="testIt();">
<div id="test-html"> </div>
<div id="test-innerHTML">
<script>
alert('xss')
</script>
</div>
</body>
,你可以看到test-html
格是空的, test-innerhtml
div包含腳本。有人能告訴我爲什麼嗎?是因爲html()對腳本注入或類似的東西更安全嗎?
在此先感謝,最好的問候。
你不必擔心安全的用戶類型,因爲他們試圖插入的任何腳本都將只有af在那個時候對他們產生了影響。你需要擔心的是當輸入的文本被提交到你的web服務器時會發生什麼 - 如果你將它存儲在數據庫中,你需要確保你不會盲目地將輸入的文本連接到SQL的末尾查詢。如果您以後返回以前輸入的文本,則需要確保輸入的值已被轉義,以便例如「
是jQuery文檔不會渲染腳本標籤
,但它是不是更安全 ,因爲你可以使用許多其它XSS有效載荷,如
<a href>
風格,表達等。來源
2011-11-29 22:39:42 Ben
它*更安全,它不是*完全*安全的,不應該依賴它。 – Mario
是的我猜這是真的,但安全不是這個詞,讓我們只是認爲它是不容易的,然後innerHTML。 – Ben
實際上,** jQuery所做的更容易被利用**,因爲當jQuery發現'
相關問題