是否可以伪造发布请求?

信息安全 Web应用程序
2021-09-08 01:56:34

考虑以下 URL http://mysite.com/form?date=x假设如果x格式不正确,则返回的页面带有<p>x is not a valid date</p>,页面作者忘记转义变量x假设x在所有其他位置正确转义。

可以创建一个恶意链接,该链接可以插入任意 Javascript 并访问用户的凭据。如果站点需要 POST 而不是 GET 怎么办?有没有办法利用这个安全漏洞?

更新:将情况更改为更现实,并删除与点击劫持无关的引用

3个回答

点击劫持是一种欺骗用户点击他不知道的东西的攻击。它通常是通过将被攻击的页面加载到透明的 iframe 中来完成的。此 iframe 滚动到正确的位置并保持在鼠标指针下方。

一个经常被 Clickjacking 攻击的功能是Facebook 的like-button

虽然点击劫持确实适用于 POST,但简单的攻击不允许攻击者操纵 URL 或表单参数。

跨站点请求伪造是使用易受攻击的站点作为攻击者站点上的表单目标的攻击的名称。此表单可以完全不可见并通过 JavaScript 自动提交。所有常见的浏览器都会在请求中包含目标站点的会话 cookie。

通过添加具有随机值的隐藏表单字段来防止跨站点请求伪造攻击除非存在其他漏洞,否则 CSRF 攻击是盲目进行的,因此攻击者无法读取该隐藏值。

在您的情况下,即使表单受到随机 CSRF 预防令牌的保护,您仍然应该修复跨站脚本错误,因为可能存在其他漏洞。攻击者可以非常有创意地将小漏洞组合成一个完整的漏洞利用

你不需要点击劫持。坦率地说,我不明白你为什么要问关于点击劫持的问题。它似乎不相关。

这是一个沼泽标准的 XSS 漏洞,一旦站点出现这样的 XSS 漏洞,站点的安全性就会丢失。如果该站点存在 XSS 漏洞,则点击劫持几乎不相关(攻击者没有理由为点击劫持而烦恼)。

如果网站要求它以 POST 的形式出现,它仍然同样容易受到攻击。例如,攻击者可以构造一个表单并使用 Javascript 自动提交它。

您最好的选择可能是阅读一些有关 XSS(跨站点脚本)的背景知识。

<form method=POST action=http://vulnerablesite.com/>
  <input type=hidden name=q value=evil-content>
</form>

<script>document.forms[0].submit()</script>

将页面重新加载到来自跨站点 POST 的内容,该 POST 包含任意 POST 参数,而无需用户进行任何交互——攻击者只需要能够让用户加载他们控制的页面。

您询问“是否有可能创建一个可以插入任意 Javascript 的恶意链接”。是的,在您提供的示例中,表单如下所示:

<form method=POST action=http://mysite.com/form>
  <input type=hidden name=date value="&lt;script&gt;alert(1)&lt;script&gt;">
</form>
<script>document.forms[0].submit()</script>

创建这样的网页并将用户引导至此恶意链接将<script>alert(1)</script>作为date参数值发送如果 thas 没有正确转义(就像你在问题中提到的那样),你只是利用了最简单形式的XSS漏洞。