1

ペイパルの支払い後、ペイパルのリターン URL を使用して、顧客にログインさせずに、顧客に情報を配信したいと考えています。

そのため、トランザクションごとに URL を作成し、別のトランザクションの URL が推測されないようにするシステムが必要だと思います。

私は次のようなことを考えました:

http://www.domain.com/product/send.php?productID=12&transactionHash=[thisTransactionHash]

顧客の電子メールと製品の一意の ID に基づいて計算できる transactionHash を使用します。

この方法は理にかなっていますか?または、ログインせずに情報を配信し、顧客が他の製品の URL を推測するのを避けるための推奨事項は何ですか?


ハッシュに関する興味深い回答がいくつかありましたが、上記のアイデアにはまだ懸念事項が 1 つあります。Paypal はリターン URL を受け取る必要があるため、支払いの前に情報が渡されるため、この方法は詐欺から保護されていません。

私が見る唯一の安全な方法は Paypal 配信システムです。そのため、その回答を受け入れました。

4

5 に答える 5

1

ログインせずにハッシュを使用して保存されている情報にアクセスすることは悪い考えではありません。ただし、そのハッシュは、ID、電子メールアドレス、または任意のユーザーが知っているか推測できる同様のデータなどの既知のデータに基づいて生成されるべきではありません。

代わりに、既知のデータから値を推測または生成できない十分な長さのハッシュをランダムに生成する必要があります。すでに述べたrandom.orgのバイト関数はそのための良い選択かもしれません。

于 2013-02-19T15:11:58.377 に答える
1

PayPalのみを対象とする場合は、即時支払い通知ガイドを確認してみてはいかがですか? https://www.x.com/sites/default/files/ipnguide.pdf

以前は Paypal を使用したことがありませんでしたが、これで問題が解決したようです。

テーブルを作成: | product_id (製品の一意の ID) | varchar transaction_hash |

このサンプル コード (PHP の例): https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

支払いが正しいことを確認した後、製品 ID と verify_sign (paypal POST データからの値) をテーブルに挿入します。製品 ID と verify_sign を含む URL をユーザーに提供します。

于 2013-02-19T15:22:34.310 に答える
1

任意の時点でユーザーのランダム ID を作成できます。おそらく、Web 上にある真のランダム ジェネレーターを使用することもできます。

しかし、あなたがすべきことは、おそらく単純なデータベース構造で、おそらくサーバー上のファイルに情報を保存し、一度読み取られるとすぐに同じスクリプトによって削除される、特定の時間だけ一意にすることです。あなたのニーズに。

そのため、ユーザーがそのような一意の ID を生成するたびに、一定期間または 1 回だけその情報にアクセスできます。

たとえば、random.org のランダム バイト関数を使用すると、次のような文字列を生成できます。

于 2013-02-19T15:05:24.210 に答える
1

「顧客の電子メールと製品の一意の ID に基づいて計算できる transactionHash を使用します。」

アルゴリズムが知られるとすぐに、システムは崩壊します。私の推奨は、「安全な」別名暗号化 PRNG + いくつかのルックアップ テーブルです。

于 2013-02-19T14:56:51.770 に答える
0

複数のパラメータに基づいて値が計算されるハッシュ パラメータを含めます。たとえば、あなたの URL に対して o は次のようにハッシュを計算します:

$uniqueKeyString="some random characters";
transactionHash=md5("domain.com".$productId.time().$uniqueKeyString);

ここ$uniqueKeyStringで、あなただけが知っている秘密の値 (ランダムな整数) です。よりも、リクエストがサーバーに届いたときに、ハッシュ文字列を自分で計算して、transactionHashそれが同じかどうかをリクエストの と比較するだけです。

于 2013-02-19T15:02:46.037 に答える