通过重定向隐藏$ _GET变量

时间:2015-12-07 17:20:47

标签: php security redirect get

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

然而,为了让生活变得更轻松并应对可能发生的任何变化,只需将整个$_GET数组放到Session变量上

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;

答案 1 :(得分:1)

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

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

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

如果你所做的只是试图保护" normies"从GET值的书签,shove-into-session-then-redirect技巧很多。只有其他选择是写一些js / ajax /无论客户端做什么 - 但是这对用户来说比对服务器端更不透明,并且取决于用户没有阻止你挥手的方法。很少有人禁用内部重定向。

我支持Riggs的方法(将所有$ _GET推送到会话中,而不仅仅是你想要的当前密钥),而不是因为它让你几乎忽略了这个帮助脚本申请的生命。

答案 2 :(得分:-1)

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

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