1

在我的 php 应用程序中,我只需要使用一些 POST 数据将用户重定向到特定的 url(第三方)即可完成他们的服务。

数据应安全地传递到该 URL(因为它们是该第三方系统的登录凭据)。

我尝试使用 cURL 执行此操作,但它不会重定向到该特定页面。如果我发布带有设置值的隐藏字段的表单,它工作正常。但是任何人都可以通过在浏览器中查看“查看页面源”选项轻松查看发布的数据。

我正在寻找一个sloution很长时间,但仍然没有运气。如果有人可以指导我将非常感激。提前致谢...!!!!

编辑

我不能使用会话,因为这是第三方 url,它要求发布登录凭据以进入该页面。

简而言之的功能,

我要做的是所有用户凭证都存储在我的系统中。
当用户按下一个按钮时,它应该将他重定向到该 url,并应该发布该凭据以进入该外部 3rd 方页面。当用户按下按钮时,他不必通过文本框输入凭据。这就是为什么如果转到浏览器中的“查看页面源代码”选项,我什至无法将隐藏字段硬编码为可见。

----------

只是我正在寻找一种方法(在 php 中),它将在发布一些数据时将用户重定向到一个 url。它可以通过创建一个表单并具有文本输入(文本框)来允许用户输入帖子信息并提交来简单地完成。

但就我而言,我不能让用户输入文本框的 POST 信息并提交。当用户单击按钮时,它必须发布数据并重定向到指定的 URL。尝试通过 cURL 执行此操作,但它不会将用户重定向到 URI。此外,如果我添加 hiddenFields 硬编码 POST 值,则它不安全,因为任何人都可以通过浏览器“查看页面源”选项查看 POST 信息。

4

5 回答 5

2

只需制作一个字段数等于凭据的表单。即,如果您想发送用户名和密码,请这样做,

<form id="uform" action="" method="post">
        <input type="text" name="uname" id="uname" style="opacity:0;" />
        <input type="text" name="pass" id="pass" style="opacity:0;" />
    </form>

在文件.php 中,

<php
var $_uname = "Required username";
var $_pass = "Required password";
echo $_uname.",".$_pass;
?>

然后在您的 javascript 中,在按钮单击事件中,获取此表单并设置输入字段的值。然后提交表格,

<script>
var ajax = new XMLHttpRequest();
ajax.open("GET","file.php",true);
ajax.send();

ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
    var dt = ajax.responseText;
    dtsp = dt.split(",");
    var frm = document.getElementById("uform");
    var inp1 = document.getElementById("uname");
    var inp2 = document.getElementById("pass");
    inp1.value = dtsp[0];
    inp2.value = dtsp[1];
    frm.action = 'Url of the site to redirect to';
    frm.submit();
    }
}

    </script>

然后在用户被重定向的第二个站点中,如果要获取数据,请执行此操作,

<php
$uname = $_POST["uname"];

$pass = $_POST["pass"];
?>

你去吧。您将安全地将数据从一个站点传输到另一个站点。

于 2012-09-28T08:14:32.330 回答
1

你可以通过发送session

在第一个站点执行此操作,

<?php
        session_start(); 
        $_dt = 'data to send';
        $_SESSION['dt'] = $_dt;
    ?>

在第二个这样做,

<?php
     session_start(); 
        $_dt = $_SESSION['dt']
?>

数据将在$_dt.

于 2012-09-27T10:30:25.400 回答
1

如果您需要将与用户关联的数据发送给第三方而不将该数据提供给用户,那么您需要使用以下流程:

  • 使用服务器端代码发送数据
  • 获取一个令牌来识别该组数据(您可以将其包含在您最初发送的数据中,或者从第三方站点的响应中获取)
  • 将用户重定向到第三方站点并在 URL 中包含令牌

显然,这需要第三方网站的配合。

将评论添加到问题后更新:

这是第三方 url,它要求发布登录凭据以进入该页面。因此会话在这里不起作用。

听起来您正试图让用户以您的身份登录而不给他们凭据。那是不可能的。

于 2012-09-27T10:27:15.997 回答
1
function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

(你也可以使用 ajax);)

于 2012-09-27T10:27:56.800 回答
0

您是否考虑过:

a) 使用 javascript 或 java 应用程序对其进行加密——我的银行过去就是这样做的。

b)将变量发布回自身,加密它们,假设它加密,然后将页面反弹到带有加密变量的新页面..

加密的唯一问题是您需要能够将其解密以将其提供给第三方应用程序,除非他们接受特定的编码,在这种情况下,如果您可以解密它,其他人就会知道如何。

于 2012-09-27T10:27:05.497 回答