Что означает "санитария JavaScript не спасет вас от innerHTML"?
Я изучаю xss-предупреждение через этот ppt: http://stash.github.io/empirejs-2014/#/2/23, и у меня есть вопрос на этой странице.
В нем говорится, что "JavaScript-санитария не спасет вас от innerHTML", и я попробовал простой тест следующим образом:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<div id="test"></div>
<script>
var userName = "Jeremy\x3Cscript\x3Ealert('boom')\x3C/script\x3E";
document.getElementById('test').innerHTML = "<span>"+userName+"</span>";
</script>
</body>
</html>
Ответы
Ответ 1
Согласно MDN, innerHTML
предотвращает выполнение элементов <script>
непосредственно 1 что означает ваш тест не должен ничего предупреждать. Однако это не предотвращает запуск обработчиков событий, что делает возможным следующее:
var name = "\x3Cimg src=x onerror=alert(1)\x3E";
document.getElementById('test').innerHTML = name; // shows the alert
<div id="test"></div>