进一步的XSS角色擒纵解释

时间:2014-07-23 16:43:22

标签: javascript regex html5 escaping xss

所以,我注意到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('<','&lt').replace('>','&gt');     
}

$('#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;)可能是有害的(并且因为学习也很有趣),我希望看到使用这些字符劫持我的上述程序的代码。

我知道这不是相当一个问题,更多是对知识的追求,但我希望它没事。

2 个答案:

答案 0 :(得分:1)

处理此问题的正确方法是设置文本。

$('#abc').text('What <ever> you & want;');

然后,不需要逃避。

答案 1 :(得分:0)

要防止反射和存储的XSS,您需要从服务器(输出字段)转义/编码部分响应。 浏览器页面内部的某些编码本身仅对DOM XSS有用,但这种情况更为罕见。