0

はい、わかりました。別の HTTP_REFERER の取り組みです。私はそれを見るとうんざりします。しかし、それは「戻る」問題の解決策として私に渡され、実際に機能するので...

...問題は、ライブで快適に展開できるほど十分に理解していないことです。

ここで HTTP_REFERER の危険性について多くのメッセージを確認しましたが、このコードはこの特定のタスクに対処していると言われています... しかし、私は確信が持てません。

だから、私の質問は以下のコードの一番下にあります - しかし、最初に、これがその背後にある基礎です:

このコードはショッピング カートに入ります。ユーザーが「カートを見る」をクリックした後、「買い物を続ける」ボタンのアクションを提供します。その目標は、ユーザーの元の場所に戻る最も適切な (または期待される) リダイレクトを提供することです。

デフォルトでは、このコードが追加されていない場合、この特定の「カートを見る」ページの「ショッピングを続ける」ボタンは、ユーザーをカートのホームページに移動させるだけです。製品のセットまたは特定のカテゴリ、または製品を見ていました。したがって、それを改善したいと考えています。また、カートで購入を完了するには JavaScript が必要であり、ユーザーが JS をオフにしてアクセスすると警告が表示されるため、この操作中はユーザーが JS をオンにする必要があります。最後に、ソリューションを 1 つのコード ブロックにまとめて、簡単に適用し、ほとんど問題なくカートの更新バージョンに移行できるようにしたいと考えました。

私に説明された方法論:

  1. リファラーが設定されていて、空でなく、はい、このカートのドメインが含まれている場合

    1a. リファラーがカート ページ自体である場合は、javascript (-1) 効果を適用します。

    1b. ELSE 先に進み、Referer を適用します - 完了。

  2. ELSE 参照が設定されていて空ではないが、このカートのドメインが含まれていない場合

    2a. 何かがおかしいので、ホームページに送信してください。(?? どうして ??)

    2b. ELSE javascript (-1) 効果を適用しましょう。- 終わり。

コード:

if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) {
    if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') {
        $this->data['continue'] = 'javascript:history.go(-1)';
    }
    else {
        $this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']);
    }
}
else {
    if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) {
        $this->data['continue'] = 'index.php?r=home';
    }
    else {
        $this->data['continue'] = 'javascript:history.go(-1)';
    }
}

私の質問:

  1. わかりましたので、疑わしい 2 つの方法を組み合わせました。全体としては機能しているようです。しかし、これ (セキュリティ / 機能) で何が問題になる可能性がありますか? 私が行方不明になっているショーストッパーはここにありますか?

  2. 2 番目の部分 (2. と 2a.) は何を達成する予定ですか? 誰かが故意に偽のリファラーにフィードしようとしているかどうかを判断するための努力であると説明されていますが、私には意味がありません.javascriptを使用するのではなく、なぜその人をホームページにルーティングする必要があるのですか? -1) 方法?

  3. 改善について何か考えはありますか?それらは常に便利です;-)

このたびはご協力いただきありがとうございました...

4

1 に答える 1

2

リファラーは、ユーザーがカートに移動する前に最後に訪れたページです。

  1. Javascript:history.go() には、リファラーと同様に訪問したページの配列が含まれているため、履歴内のページをユーザーに送り返すことができます。カートにタイムアウトがない場合を除き、どのようなリスクがあるかはわかりません。しかし、私はあまりセキュリティ担当者ではないので、知識のある人にそこのリスクを説明してもらった方がよいでしょう。

  2. ユーザーが他の Web サイトからカートに直接ジャンプした場合、実際には何か問題があるはずであり、ユーザーをそこに残すのではなく、ホームページに送信します。この場合、Java はクライアント側のソフトウェアであるため、ユーザーをホームページに誘導するために使用するサイトの閲覧履歴はありません。

  3. リファラーが本当に気に入らない場合は、ブレッドクラムが常に別のオプションであるか、または $_SESSION['previousPage'] = ....

私が間違っている場合は修正してください。

于 2011-05-06T18:17:55.377 に答える