我最近正在尝试学习DOM XSS /客户端XSS,https://www.owasp.org/index.php/DOM_Based_XSS提到了这一部分,您可以在其中以#
结尾并在JavaScript代码后结束URL,它将绕过服务器,但仍然呈现JavaScript:
避免将有效载荷发送到服务器的技术取决于以下事实:浏览器未将URI片段(“#”之后的URI中的部分)发送到服务器。因此,引用例如document.location的任何客户端代码都可能受到使用片段的攻击的攻击,在这种情况下,有效负载永远不会发送到服务器。例如,可以将上述基于DOM的XSS修改为:
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}`)
})
当我尝试使用此URL访问该网站时:
http://localhost:12343/#a.innerText=%22Work!%22
它不起作用,但是我可以使用控制台操作该变量。
#
在这种情况下如何工作?