Дальнейшее пояснение 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, чтобы предотвратить атаки XSS) я читал, что нужно также объявить кодировку (что люди должны делать в любом случае) для предотвращения UTF-7 XSS, а также избежать амперсанда, обратной косой черты и обоих одиночные и двойные кавычки для безопасности.

Чтобы лучше понять, как и почему «лишние» персонажи (&, ‘, «) могут быть вредными (и потому, что это также будет интересно узнать), я хотел бы видеть код, который захватывает мою вышеупомянутую программу, используя те персонажи.

Я знаю, что это не вопрос, скорее поиск знаний, но я надеюсь, что все в порядке.

Лучший ответ:

Правильный способ справиться с этим — установить текст.

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

Тогда не требуется экранирование.

Ответ №1

Чтобы предотвратить отраженный и сохраненный XSS, вам необходимо вывести/закодировать часть ответа с сервера (выходные поля). Некоторая кодировка внутри самой страницы браузера может быть полезна только для DOM XSS, но это более редкий сценарий.

Оцените статью
TechArks.Ru
Добавить комментарий