【问题标题】:How to get domain/referer name from POST form that action points to other domain如何从动作指向其他域的 POST 表单中获取域/引用名称
【发布时间】:2019-06-02 00:12:22
【问题描述】:

我在 domain-x.com 上有一个表格。它将表单数据发送到另一个处理它的 domain-y.com 服务。

<form method="POST" action="http://domain-y.com/">
  <input type="email" name="email" placeholder="Your email">
  <button type="submit">Send</button>
</form>

我如何获得推荐人或确保此表单的请求来自 domain-x.com

我使用Symfony\Component\HttpFoundation\Request,但它不包含任何关于 domain-x.com 的信息

$_SERVER['HTTP_REFERER'] 不起作用

编辑: 我不想改变我的表格。问题是通过请求我应该能够知道请求来自哪里......

【问题讨论】:

    标签: php html forms http


    【解决方案1】:

    您可以添加隐藏字段。

    <input type='hidden' name='referrer' value='<?=$_SERVER['SERVER_NAME']?>'/>
    

    然而,将表单发布到完全不同的域似乎很不正统。

    你可以欺骗$_SERVER['HTTP_REFERER'],所以任何一种方式都不完全可靠

    HTTP_REFERER 上的文档

    将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

    https://php.net/manual/en/reserved.variables.server.php

    【讨论】:

    • 我当然可以那样做,但是创建可以轻松更改的输入更糟糕
    • 您可以轻松更改 HTTP_REFERRER
    • en.wikipedia.org/wiki/Referer_spoofing "有几种软件工具可以帮助在网络浏览器中进行引用欺骗。"
    • 也许推荐人不是最好的解决方案,但不知何故我应该能够确定请求来自哪里
    • 有什么原因不能发帖到自己的域,然后通过php转发到domain-y?可能通过您在 domain-y 上创建的 API 或脚本来接收它?
    【解决方案2】:

    我不能得到前任的原因。请求中的引用者或任何其他标识符标头是我的测试服务器上缺少 SSL 证书。

    这意味着在 form action 中我必须将 url 从 http 更改为 https 并创建 SSL 证书

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2022-01-25
      • 2012-07-01
      相关资源
      最近更新 更多