【问题标题】:PHP form referrer security [duplicate]PHP表单推荐人安全[重复]
【发布时间】:2012-03-05 19:16:17
【问题描述】:

可能重复:
How to know where a form came from?

我今天浏览了这些论坛,但找不到足够好的答案来回答我的问题。

我如何才能阻止将表单提交到我的服务器,除非它们是从我的域引用。我已经意识到,如果有人直接复制我的表单 HTML 并将其粘贴到他们自己的平台中,他们表单中的数据将解析我的文件并执行表单在我的站点上设置的操作。

如何防止这种情况发生?我正在考虑检查推荐人是否来自我的域,但根据我的研究,这不会阻止这种情况的发生。那么我怎样才能阻止这种情况发生呢?

【问题讨论】:

  • I have realised that if somebody just copies my form HTML directly and pastes it into their own platform, the data from their form will parse through my files and do what the form is set to do on my site. 你能解释一下为什么这是(或可能是)问题吗?你真的无法阻止它
  • 您的站点可以生成一个存储在$_SESSION 中的随机值,该值必须由表单在隐藏的输入字段中提交,但这也可以进行编码——这只是一个障碍。如果没有用户身份验证,你真的无法阻止这种情况。
  • 老实说,他们甚至不需要复制表单的 html,发出一个 post 请求就足够了。仍然 - 这是怎么回事?
  • 如果数据的原始ip有问题,你的问题就更大了。
  • 相关(如果不重复):Stop Spoofed Form Submissions

标签: php html forms security


【解决方案1】:

REFERER 很容易被欺骗,但也很容易检查,因此作为主要的防御屏障,它并不算太糟糕。对于更复杂的预防,您可以在加载包含相关表单的页面时生成一个令牌,将其存储在用户会话中,将其保存在表单的隐藏字段中,并在提交表单时根据会话检查它价值。但是,如果有人愿意,也可以避免这种情况,因此根据您的具体情况,HTTPS 将是最后的手段。

【讨论】:

    【解决方案2】:

    您可能会尝试防御两种类型的攻击。

    第三方诱使用户在您的网站上执行操作

    这是 Alice 登录 Bob 的网站,然后访问攻击者的网站,攻击者的网站导致 Alice 的浏览器(例如)向 Bob 的网站发出“转账”请求。

    这是一个CSRF attack,标准defence 是在隐藏字段中包含一个也存在于用户会话中的令牌。

    攻击者无法将令牌放入他们的表单中,因此如果令牌匹配,您就知道该表单在您的网站上。

    用户修改表单中的数据以提交一些他们确实不应该提交的数据

    例如,Alice 在提交编辑请求之前更改了评论的 POST_ID,从而编辑了其他人的帖子,或者她可能更改了所订购商品的价格。

    对此的防御是验证输入。如果收到编辑请求,请确保登录用户有权编辑帖子。如果有订单,只需注意商品的 ID 和数量,您就可以从数据库中获取价格。等等

    【讨论】:

      【解决方案3】:

      您不能依赖推荐人!它可以被禁用。

      但是您可以使用token,您可以将其 a) 写入隐藏的输入字段,b) 写入用户会话。 在您的目标脚本中,您只需检查它们是否等效!

      【讨论】:

        【解决方案4】:

        您试图确保当 POST 进入您的应用程序时,它来自您服务器的 FORM,而不是其他地方。这称为跨站点请求伪造 (CSRF) 攻击。

        检查引荐来源网址是有问题的。首先,HTTP 规范特别允许客户端不发送引用字符串(出于各种隐私原因)。因此,您的一些客户可能不包括它。其次,引用字符串可以被欺骗,有足够技能的攻击者可以使它们看起来像他们需要的那样,以便成功进行 CSRF 攻击。

        使用 CSRF 验证令牌是一种更强大的方法,并且是缓解 CSRF 攻击的首选方法。您可以在OWASP CSRF Cheat Sheet 上了解为什么会这样。

        我还要指出,你没有理由不能同时做这两件事。纵深防御 (DiD) 策略通常是可取的,因此攻击者需要击败多个独立的防御来执行成功的攻击。您可以实施弱引荐来源网址检查方法(如果客户端提供引荐来源网址,请确保在对请求采取行动之前它应该是什么;如果引荐来源网址不存在,就好像它存在并且正确一样继续进行)以及 CSRF 验证令牌。这样,如果客户端提供了引用的信息,您就可以检查它,同时仍然使用更强大的验证令牌方法。

        【讨论】:

          猜你喜欢
          • 2017-07-15
          • 1970-01-01
          • 2016-04-06
          • 2012-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多