【问题标题】:Testing CSRF vulnerability测试 CSRF 漏洞
【发布时间】:2014-09-02 22:35:57
【问题描述】:

在我的 php 页面 (register.php) 中有一个表单,我想检查它是否容易受到 CSRF 的攻击(正如我所期望的那样):

<form method="post" name="registration">
    <label>Nome</label><br>
    <input name="nome" type="text" autofocus required="required" placeholder="Nome">
    <input name="cognome" type="text" required="required" placeholder="Cognome"><br>
    <label>Azienda</label><br>
    <input name="azienda" type="text" required="required" placeholder="Azienda"><br>
    <input name="submit" type="submit" value="Registrami">
</form>

为了测试我从浏览器访问的漏洞 url

http://localhost/myfolder/register.php?nome=MyName&cognome=MySurname&azienda=University

我希望浏览器填写表单的字段,但没有发生。

你能解释一下为什么吗?

【问题讨论】:

  • 为什么要将参数作为GET 请求发送?
  • 我正在按照他在本教程中所做的相同方式进行测试youtu.be/3yrpRfdtYc4?t=1m33s
  • 任何参数可预测的表单都容易受到 CSRF 的攻击。
  • 这是一个 15 分钟的视频。您能否编辑问题并在那里添加相关信息?我的意思是,我还没有看到它,我不明白为什么浏览器会在 URL 中获取 GET 参数并使用它们的值来填充页面中的随机 POST 表单。
  • @ÁlvaroG.Vicario — 浏览器不会。该视频显示了使用来自$_REQUEST 的一些抽象的数据来回显value 属性的值)

标签: php html csrf


【解决方案1】:

浏览器仅使用自动填充数据填充表单字段。

对于从 URL 获取到表单的数据,服务器必须解析 URL 中的数据并使用它来填充 from 字段。

例如

value="<?php echo htmlspecialchars($_GET['nome']); ?>"

您的代码没有这样做并不意味着表单不会受到 CSRF 的攻击。

CSRF 攻击完全替换了表单(通常使用不可见的表单,预先填充恶意数据并使用 JavaScript 提交并托管在不同的网站上(因此称为“跨站点”)。CSRF 攻击的目标不是将数据放入表单,但放入提交给的任何表单中。

攻击注册表几乎没有任何意义。更有可能的目标是评论表单(因此站点 A 上已注册和登录的用户将用于提交站点 B 所有者编写的 cmets)。然后将使用站点 A 上的用户帐户创建站点 B 的垃圾邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 2021-10-22
    • 2017-11-23
    • 1970-01-01
    • 2018-11-24
    • 2021-08-06
    • 2022-01-01
    • 2013-02-25
    相关资源
    最近更新 更多