所以,我注意到XSS主要依靠未转义的角度括号来插入html标记。我在这里有这个代码:
<!doctype html>
<html lang = 'en'>
<head>
<meta charset = 'utf-8' />
<title>XSS Blocker</title>
<style>
textarea { width: 400px; height: 300px; margin-left: auto; margin-right: auto }
#abc { background: white; }
div { background: blue; }
</style>
</head>
<body>
<div id = 'abc'>
</div>
<br>
<textarea id = 'noXSS'> </textarea>
<button type = 'button' id = 'insert'>Insert into page</button>
<button type = 'button' id = 'toggle'>Disable XSS</button>
</body>
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
$(function() {
var noXSS = false;
function cleanInput(input) {
return input = input.replace('<','<').replace('>','>');
}
$('#toggle').mousedown(function() {
noXSS = !noXSS;
if (noXSS) {
$(this).html('Enable XSS');
}
else {
$(this).html('Disable XSS');
}
});
$('#insert').mousedown(function() {
var text = $('#noXSS').val();
if (noXSS) { text = cleanInput(text) }
$('#abc').append(text);
$('#noXSS').val('');
});
});
</script>
</html>
在将文本插入网页之前,本质上只会转义<
和>
个字符。在一个相关的问题(Escaping <
Good Enough to Prevent XSS Attacks)中,我读到一个人也必须声明charset(人们应该做的事情)以防止UTF-7 XSS,并且还应该转义&符号,反斜杠以及单个和安全的双引号字符。
要更好地了解“额外”的方式和原因。字符(&amp;,&#39;,&#34;)可能是有害的(并且因为学习也很有趣),我希望看到使用这些字符劫持我的上述程序的代码。
我知道这不是相当一个问题,更多是对知识的追求,但我希望它没事。
答案 0 :(得分:1)
处理此问题的正确方法是设置文本。
$('#abc').text('What <ever> you & want;');
然后,不需要逃避。
答案 1 :(得分:0)
要防止反射和存储的XSS,您需要从服务器(输出字段)转义/编码部分响应。 浏览器页面内部的某些编码本身仅对DOM XSS有用,但这种情况更为罕见。