0

リクエストの有効性を検証するために、ページ間でトークンを渡すことによって保護されるシステムの作成に取り組んでいます。トークンはログインページで生成され(一度生成するだけでよいため)、メインページに渡されます。ただし、ユーザーをログインさせるために実行されている中間PHPスクリプトがあり、投稿されたトークンを取得してメインページに渡す方法がわかりません。

つまり、ログインページから中間スクリプトにトークンを投稿し、次にスクリプトからメインページにトークンを投稿する必要がありますが、その方法がわかりません。

4

5 に答える 5

0

クライアント側のCookieを使用できます。

<?php
setcookie("token", $myToken);
?>

この方法の最大の欠点は、ユーザーがブラウザでCookieを有効にする必要があることです。安全性の高い状況では、ユーザーがCookieを有効にしていない可能性があるため、この方法は機能しません。

$_SESSIONグローバル変数を使用します。

<?php
$_SESSION['token'] = $myToken;
?>

以前のバリアントと同様に、Cookieを有効にする必要があります。

$_GETURI文字列にパラメータを追加します。

http://example.com?token=f4FArqk53Gwr4fESC73FedG48Trd3YEj

この方法の最大の欠点は、URI文字列が非常に複雑に見えることです。

また、ユーザーが手動で変更すると、状態情報が失われますURI

または、すべてを非表示のフォームフィールドに渡します。

残念ながら、すべてのページでフォームを送信する必要があります。

あなたはでそれを行うことができますjQuery


いくつかの例はここにあります。

于 2012-09-24T00:52:22.497 に答える
0

私はずっと前にこれを書きました:

function postheader($url, $server, $cookies, $daten)
{   
    $temp=array();
    $out = "POST ".$url." HTTP/1.1\r\n";
    $out .= "Host: ".$server."\r\n";
    if(count($cookies)>0)
    {
        $out .= "Cookie: ";
        foreach($cookies as $name=>$value)
        {
            $temp[] = $name."=".$value;
        }
        $out .= implode("; ",$temp);
        $out .= "\r\n";
    }
    $out .= "User-Agent: Mozilla/4.0\r\n";
    $out .= "Content-type: application/x-www-form-urlencoded\r\n";
    $temp=array();
    foreach($daten as $key=>$data)
    {
        $temp[] = $key."=".urlencode($data);
    }
    $temp=implode("&",$temp);
    $out .= "Content-Length: ".strlen($temp)."\r\n";
    $out .= "\r\n";
    $out .= $temp."\r\n";

    return $out;
}


$fp = fsockopen($server, 80, $errno, $errstr, 30);
if (!$fp)
   die( "$errstr ($errno)<br />\n");

$out=postheader($url, $server, $cookies, $daten);
//echo $out;

fwrite($fp, $out);
while (!feof($fp))
{
    $string.= fgets($fp, 128);
}
fclose($fp);

$ datenは、postリクエストを介して送信するデータを含む1次元の連想配列である必要があります。Cookieの場合は、空の配列を追加するだけです。

$ serverはホストアドレスであり、$urlはサーバー上のアドレスのみです。

$server="stackoverflow.com";
$url="/post.php";

$ stringには、ヘッダーを含む応答全体が含まれます。それらが不要な場合は、最初の「\ r \ n \ r\n」オカレンスからサブストリングを実行します。

于 2012-09-24T00:54:31.123 に答える
0

3つのページすべてが同じホスト上にある場合は、Cookieまたはセッションを使用します。

于 2012-09-24T00:44:23.980 に答える
0

代わりに、データをCookie/セッションに保存します。

session_start();

$_SESSION['token'] = 'yourTokenHere'

PHPセッションを参照してください

于 2012-09-24T00:48:25.433 に答える
0

さらに考えてみると、私は物事を必要以上に複雑にしていたようです。皆さんの助けに感謝しますが、解決策は私がもう少し賢くなければならないということのようです。

于 2012-09-24T01:32:33.587 に答える