1

私のphpアプリケーションでは、ユーザーを特定のURL(サードパーティ)にリダイレクトし、POSTデータを使用してサービスを完了させる必要があります.

データはその URL に安全に渡される必要があります (サードパーティ システムへのログイン資格情報であるため)。

cURL でこれを実行しようとしましたが、その特定のページへのリダイレクトは行われません。値が設定された非表示フィールドを含むフォームを投稿すると、正常に機能します。しかし、ブラウザの「ページのソースを表示」オプションを表示することで、投稿されたデータを誰でも簡単に見ることができます。

私は長い間解決策を探していますが、まだ運がありません。誰かが私を導くことができれば、本当に感謝しています。前もって感謝します...!!!!

編集

これはサードパーティの URL であり、そのページに入力するためのログイン資格情報を投稿するように求められるため、セッションを使用できません。

簡潔な機能、

私がしなければならないことは、すべてのユーザー資格情報が私のシステムに保存されていることです。
ユーザーがボタンを押すと、その URL にリダイレクトされ、その資格情報を POST して外部のサードパーティ ページに入力する必要があります。ユーザーがボタンを押すときに、テキスト ボックスで資格情報を入力する必要はありません。そのため、ブラウザで「ページのソースを表示」オプションに移動すると、hiddenfield を可視としてハードコーディングすることさえできません。

----------

単純に、データを投稿しているときにユーザーをURLにリダイレクトするメソッド(php)を探しています。FORM を作成し、textinputs(Textboxes) を使用して、ユーザーが投稿情報を入力して送信できるようにするだけで簡単に実行できます。

しかし、私の場合、ユーザーがテキストボックスの POST 情報を入力して送信することはできません。ユーザーがボタンをクリックすると、データを 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>

file.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>

次に、ユーザーがリダイレクトされる 2 番目のサイトで、データを取得する場合は、次のようにします。

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

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

そして、ここに行きます。あるサイトから別のサイトにデータを安全に転送できます。

于 2012-09-28T08:14:32.330 に答える
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 に答える
1

を通じて送信できますsession

最初のサイトでこれを行い、

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

2番目にこれを行い、

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

にデータが入ります$_dt

于 2012-09-27T10:30:25.400 に答える
0

次のいずれかを検討しましたか。

a)JavaScriptまたはJavaアプリで暗号化する-これは、私の銀行が以前行っていた方法です..

b)変数をそれ自体にポストし、暗号化すると仮定してそれらを暗号化し、暗号化された変数を使用してページを新しいページにバウンスします..

暗号化の唯一の問題は、特定のエンコーディングを受け入れない限り、暗号化を解除してサードパーティのアプリに提供できるようにする必要があることです。その場合、暗号化を解除できる場合は、他の誰かが解決します。

于 2012-09-27T10:27:05.497 に答える