通过重定向隐藏$_GET变量



我使用的是一个第三方应用程序,需要与我自己的应用程序集成。在第三方应用程序中,信息通过表格发布,然后重定向到我的网站进行进一步处理。重定向到我的网站将包含我需要从重定向URL中的表单中获得的变量。但是,我不希望发布表单的用户能够查看这些变量。

如果重定向链接隐藏在第三方应用程序上(即它不在表单中),那么我认为可以工作的一种方法是将第三方程序引导到执行以下操作的"预处理"脚本:

session_start();
$_SESSION['some_variable_to_save'] = $_GET['some_variable_to_save']; //properly sanitized!!
header('Location: where_i_really_want_to_process.php');
exit;

然后,在其中_i_really_want_to_process.php中,我可以处理会话变量。这是一种确保用户永远不会看到$_GET变量的安全方法吗?

您使用$_SESSION的建议似乎是唯一的解决方案。

然而,为了让生活更轻松一点,并应对可能发生的任何变化,只需将整个$_GET阵列放到会话变量上

session_start();
// dont sanitization here, do it in the where_i_really_want_to_process.php
$_SESSION['previous_GET'] = $_GET;
header('Location: where_i_really_want_to_process.php');
exit;

如果必须让用户将数据转发给您,则在物理上不可能"确保"用户永远不会"看到"正在传递的某种形式的数据他们必须看到某种形式的数据,否则他们无法转身告诉您的服务器数据是什么。

如果你可以加密数据,这将有效地向用户隐藏数据(假设你使用了良好的加密)。但是你缺乏对第三方的控制,所以这可能是不可行的。

另一种选择是找到一个你可以信任的第三方来提供有限的数据库访问权限,并让他们直接联系你的服务器,而不是使用客户端作为中间人。在不知道你在做什么的情况下,我不知道这是否可行。

如果你所做的只是试图保护"正常人"不将GET值作为书签,那么推入会话然后重定向的技巧就足够了。唯一的其他选择是在客户端写一些js/ajax/任何能做it的东西——然而,这对用户来说不如在服务器端做it透明,而且取决于用户是否阻止你挥手的方法。很少有人禁用内部重定向。

然而,我支持Riggs的方法(将所有$_GET推入会话,而不仅仅是您想要的当前密钥)而不是所讨论的解决方案,因为它可以让您在应用程序的整个生命周期中忽略这个辅助脚本。

尝试使用变量的关联数组$_POST

$_POST = $_GET;
$_GET = [];
header('Location: where_i_really_want_to_process.php');

最新更新