Uczę się zapobiegania xss poprzez ten ppt: http://stash.github.io/empirejs-2014/#/2/23 i mam pytanie na tej stronie.co oznacza "sanityzacja JavaScriptu, która nie chroni cię przed wewnętrznym HTML"?
mówi "dezynfekcja JavaScript nie zaoszczędzić od innerHTML" i próbowałem prosty test takiego:
<!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>
kiedy otworzyłem ten kod HTML na mojej przeglądarce (Chrome), widziałem tylko nazwę "Jeremy", za pomocą klawisza F12, widziałem
<div id="test"><span>Jeremy<script>alert('boom')</script></span></div>
Mimo że skrypt został dodany do html, okno alertu nie pojawiło się.
"Czyszczenie JavaScript nie chroni przed wewnętrznym HTML" Myślę, że to oznacza, że słowo "boom" powinno być ostrzeżone. Czy mam rację?
"* Mam rację? *". Nie. * InnerHTML * nie wykonuje skryptów. – RobG
innerHTML * można * wykonać, aby wykonać skrypt za pomocą wbudowanych atrybutów. –