1

私の質問は、フォームで PRG パターンを使用するときにリダイレクト中にデータを保持する方法についてです。具体的には、これを e コマース アプリケーションで使用したいと考えています。リダイレクト経由でデータを保存するには 3 つのオプションがあり、それぞれに懸念があります。皆さんがこの問題を解決するのを手伝ってくれることを願っています:

1.) URL 文字列にデータを格納する

URL で渡される暗号化された文字列としてデータを保存できます。これは、クレジット カード情報を保存する必要がないという点で優れていますが、Google アナリティクスによって、暗号化されているにもかかわらず、クレジット カード情報がインデックスに登録されて検索結果に表示される可能性があるのではないかという懸念があります (間違っている可能性もあります)。 . うまくいけば、私はこの問題で間違っていて、この方法が最も簡単なので、この方法を使用できます。

2.) セッションにデータを保存する

データをセッションに保存することはできましたが、Cookie が無効になっているために一部のユーザーがセッションを使用できなくなり、アプリケーションの有用性が制限されるのではないかと心配しています。さらに、暗号化されたクレジット カード情報をセッションに保存しますが、PCI コンプライアンスは、いかなる状況でも CVV を保存することは許可されていないと述べています。

3.) データベースにデータを保存する

データをデータベースに保存することで、セッションとの互換性に関する懸念を解決できますが、どのような状況でも CVV 番号を保存できないという問題が残っています。

PRG パターンを使用する場合、URL を介して情報を渡すことが最善の方法のようです。ページ内の Google アナリティクスが URL 内のクエリ文字列をインデックス化するのではないかと心配しています。クエリが暗号化された読み取り不可能な形式のクレジット カード情報であったとしても、それが何かに表示されることは望ましくありません。Analytics がその情報を保存してインデックス化するという考えが間違っていることを願っています。

教えてください、助けてくれてありがとう。

4

2 に答える 2

1

Ley's は、URL を介してクレジット カード情報を渡すとします。

クローラーが CVV を使用してページをインデックス化できる唯一の方法は、投稿の送信後にユーザーがリダイレクトされた URL が何らかの形で漏洩した場合です。URL で渡されるクレジット カード情報を暗号化するとおっしゃっていますが、これがどのように行われるかの詳細は非常に重要です。

すべてを同じキーで暗号化し、ページが要求されたときに URL 情報を復号化し、確認のためにユーザーに表示するだけでは、十分ではありません。たとえば、確認ページを 1 回だけ表示できるようにするだけでは十分ではありません。CVV 番号はそれほど多くないため、ユーザーは簡単にすべての組み合わせを試して、暗号化する内容を確認できます。したがって、複雑な暗号解読ソリューションを検討することさえ考えていません。

これを行うことができると思われる方法は、長いランダムキーを生成することです(または、暗号化する情報がそれほど多くないため、その場合は対称暗号化を使用できるため)、データを次のように暗号化しますそのキーをクライアントに安全で短命の Cookie として設定します (もちろん、https 全体で)。そうすれば、仮に URL が漏洩しても、そのユーザーだけがクレジット カード情報を解読できるようになります。

これにより、Web サーバーで要求をログに記録している可能性があるという問題も解決されます。Cookie がログに記録されることはめったにないため、ログを調べてもクレジット カード情報を取得するには不十分です。

于 2010-07-12T13:29:36.630 に答える
0

この情報を渡すページの Google アナリティクスを無効にし、情報を含むすべてのページに証明書があることを確認してください。基本的な暗号化も使用する価値があります。

URL を送信する場合にできることは次のとおりです。これにより、セキュリティがさらに強化されます。

$text   =   '464945645667567564564';
$key    =   'highlysecurkeyhere';

// step 1: encrypt (you can then send this through _GET as urlencoded)
$iv         =   mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
$encrypted  =   mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);
$encrypted  =   urlencode($encrypted);

// Recieving end, decoe then decrypt.
$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, urldecode($encrypted), MCRYPT_MODE_CFB, $iv);
echo $output;
于 2010-07-12T13:33:18.757 に答える