【问题标题】:redirect with special POST headers使用特殊的 POST 标头重定向
【发布时间】:2011-09-10 13:33:04
【问题描述】:

在我的系统中,用户将数据输入到表单中,并由 PHP 脚本处理。

这个 php 脚本会处理这些数据,然后需要将用户重定向到 https 页面,同时还要发送它自己的 POST 参数。

所以,例如,如果

send-me.php?name=chuck+norris
被调用,用户应该被重定向到
https://secret.hideout.com/
其中一个 POST 参数是 is_chuck="1" be_polite="绝对" run_away="这有什么意义?"

这可能吗?怎么样?

谢谢

【问题讨论】:

  • 您控制secret.hideout.com 还是第三方网站?

标签: php redirect https http-headers


【解决方案1】:

如果您不控制目标站点,我能看到的唯一方法是在 PHP 页面上设置第二个 <form>,并将 https:// URL 作为目标,并将值作为隐藏字段。

但是,通过这种方式,在您的 PHP 脚本更改了这些值之后,用户仍然可以对其进行操作。

或者,根据您需要做的事情的性质,考虑在表单发布之前使用 JavaScript 在客户端操作值。

【讨论】:

  • 这也是我能想到的唯一方法,但我讨厌它的笨拙感觉:\
【解决方案2】:

您不能重定向到带有 POST 参数的 URL。

您可以使用 GET 参数(附加到 URL 的末尾)重定向到 URL:

https://secret.hideout.com/?is_chuck=1&be_polite=definitely&run_away=now

您可以使用 CURL 调用带有 POST 参数的 URL,但不能重定向到它。

【讨论】:

    【解决方案3】:

    我认为最好的方法是创建一个表单并从 javascript 调用提交。

    在你解析你需要的数据后,在send-me.php中显示这个html:

    <form name="send" action="https://secret.hideout.com/" method="post">
    <input type="hidden" name="is_chuck" value="1" />
    ...
    </form>
    <script type="text/javascript">
    document.forms.send.submit();
    </script>
    

    但是这有缺点:

    • https://secret.hideout.com/ 将通过Referer 标头知道您发送客户端并从其发送到他的页面。
    • 客户端可以篡改发布数据以了解发布的内容。

    在另一种方式中,您可以制作发布服务器端,但客户端将无法正常导航,因为 cookie 等。

    【讨论】:

    • 是的。我认为这是唯一的解决方案。笨拙,但是嘿...谢谢
    【解决方案4】:

    需要将用户重定向到 https 页面,同时还要发送它自己的 POST 参数。

    那是不可能的。 POST 是 request 标头,而不是响应。

    所以,不要干扰用户和任何服务。
    总有一种合法的方式来获得交易结果。用它。

    【讨论】:

    • 我不控制 https 页面,也不控制我需要用来访问它的方法。不支持 GET。
    • 所以,不要干扰,让用户直接去服务
    • 你不会只是给我怀疑的好处并假设这是不切实际的吗?我有 20 个这样的 POST 参数需要发送,其中一些需要从数据库中收集,并且这些参数不能被用户搞砸
    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2013-06-08
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多