Как символ # используется в URL для манипулирования JavaScript - PullRequest
0 голосов
/ 28 мая 2019

Я недавно пытаюсь изучить DOM XSS / clientide XSS, и https://www.owasp.org/index.php/DOM_Based_XSS упоминает эту часть, где вы можете завершить URL-адрес #, сопровождаемым кодом JavaScript, и он будет обходить сервер, но по-прежнему будет отображаться JavaScript:

Техника, позволяющая избежать отправки полезной нагрузки на сервер, основана на том факте, что фрагменты URI (часть в URI после «#») не отправляются на сервер браузером. Таким образом, любой код на стороне клиента, который ссылается, скажем, на document.location, может быть уязвим для атаки, которая использует фрагменты, и в этом случае полезная нагрузка никогда не отправляется на сервер. Например, вышеупомянутый XSS на основе DOM может быть изменен на:

http://www.some.site/page.html#default=<script>alert(document.cookie)</script>

Я пытался обслужить этот HTML

<!DOCTYPE html>
<html lang="en">
<body>
    <p id="asd"> asdasdasd </p>
</body>
<script>
    var a = document.querySelector("#asd");
</script>
</html>

На следующем экспресс-сервере

const app = require("express")();
const PORT = 12343;

app.get("/", (request, response) => {
    console.log(__dirname)
    response.sendFile('asdasd.html', {root: `${__dirname}`})
})

app.listen(PORT, () => {
    console.log(`server listening on port: ${PORT}`)
})

И когда я пытаюсь зайти на сайт по этому адресу:

http://localhost:12343/#a.innerText=%22Work!%22

Это не работает, однако я могу манипулировать переменной с помощью консоли.

Как # работает в этом контексте?

...