我看过很多关于XSS攻击的文章,
但有一件事让我感到困惑的是,脚本注入实际上是如何工作的?
例如,如果攻击者输入<script>alert('Attack!')</script>
作为输入,为什么它可以永久地留在浏览器中,并且每个访问该网站的用户都可以看到警告。
根据我的理解,在攻击者输入后,将发送一个POST请求,有效载荷为<script>alert('Attack!')</script>
。同时,<header>
标签或<script>
应该只在客户端源代码/Web服务器上操作。
它是如何工作的?
理解经典XSS机制的最简单方法:如果没有安全措施,攻击者将脚本输入到文章下面的评论部分的文本框中,然后将其发送进去。这样,脚本将存储为在服务器的数据库中。每当有人访问带有评论部分的页面时,脚本将加载到访问者的客户端。
要纠正这个错误,请转义输出并使用Content-Security-Policy。
有几种类型的XSS漏洞。我假定您谈论的是持久性xss,因为这是与您的问题相关的一种类型。
在持久性xss漏洞中,您可以POST一个请求,然后将其存储在应用程序的服务器端后端(即数据库)。
例如,数据库中存储文章注释部分的表。
当应用程序的其他客户端请求该页面时,服务器响应相关的文章HTML页面,其中包括攻击者有效负载存在的评论部分。然后,每个接收到该HTML页面的客户端也将收到带有恶意<script>payload</script>
脚本的评论。
<script>
标记作为从服务器接收到的合法JS代码.由于此代码是由攻击者注入的,并且在客户端的浏览器中运行,因此它可能是有害的-窃取客户端的cookie,会话密钥等并将其发送到远程服务器。