7

PHP のページ間でクレジット カード情報を安全に渡すにはどうすればよいですか? 私は e コマース アプリケーションを構築しており、ユーザーが次のようにチェックアウトできるようにしたいと考えています。

情報を入力 -> 確認 -> 注文を確定

問題は、ユーザーが信用情報を入力してから処理するまで (注文の確定ステップで) 信用情報を安全に渡す方法がわからないことです。暗号化を使用しても、セッションの使用は安全ではないと聞きました。

どんな助けでも大歓迎です!

4

6 に答える 6

10

どこにも保管しません。それはあまりにもリスクが高く、おそらく倫理的ではありません。

https 経由でフォームを投稿して支払いゲートウェイにリクエストを送信し、トランザクションの結果のみを保存します。

おそらく、トランザクションが承認されたか拒否されたかだけを気にします。番号が何であるか誰が気にしますか?

于 2010-03-28T03:23:48.523 に答える
8

クレジットカード情報をセッションに保存したり、データベースに保存したり、ファイルに保存したりしないでください。代わりに、非表示のhtml入力でcc情報をレビューページに書き戻します。

したがって、プログラムフローは次のように機能します。

  1. ユーザーは、htmlフォームを介してサーバーに支払いおよび請求情報を投稿します。
  2. サーバーは、この情報が正しい形式であることを確認します(つまり、クレジットカードに適切な桁数がある、請求先住所が入力されているなど)。
  3. 検証後、サーバーは非表示のフォーム入力フィールドとして送信されたすべての情報を書き戻します。これには、請求先住所、配送先住所、クレジットカード情報が含まれます。
  4. レビューページのフォーム(入力フィールドが非表示)には、[注文の完了]/[注文の完了]というラベルの付いたボタンがあります。このレビューフォームは、注文の確定スクリプトに投稿されます。
  5. ファイナライズスクリプトは、請求/配送情報をデータベースに保存し、クレジットカード情報を支払いゲートウェイに送信します。

この方法の利点は2つあります。

  1. クレジット情報を保存するときに必要な追加のPCIコンプライアンスのオーバーヘッドとコストを節約できます。
  2. このメソッドは、SSLプロトコルのセキュリティ範囲内にとどまります。つまり、暗号化されたクレジットカード情報は、どのような場合でもサーバーに送信する必要があります。この方法は、クレジットカードデータの永続化の複雑さを導入することなく、SSLの有効性のみに依存し続けます。

この最後の点は、別の懸念を引き起こします。レビューページを作成することで、暗号化されたクレジットカードデータがネットワークを介して送信される回数が2倍になります。この方法では、最小4つの送信があります。クライアントからサーバー、サーバーからクライアント、クライアントからサーバー(ここでも)、サーバーからゲートウェイです。レビューなしでは、クライアントからサーバーへの送信とサーバーからゲートウェイへの送信の2つ以上の送信があります。レビューページの利便性は、余分な送信のリスクに見合う価値がありますか?これは、Web開発者(およびクライアント)としてのあなたが下す決定です。

于 2010-03-28T05:53:08.933 に答える
1

まず、HTTPS プロトコルを使用して、接続が暗号化されていることを確認する必要があります。

その後、データを$_SESSIONスーパーグローバルに保存できます。データはサーバーに保存されるため、比較的安全です。

注文データベースに情報を挿入する同様の手法を実行できます。キーは、GUID またはかなりランダムで一意のものです。次に、その人が注文を変更/レビューするときに、注文 ID を URL の GET 部分に保存する必要があります (または、妄想的な場合は、Cookie/セッション変数)。

 https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs

セキュリティを強化するために、注文テーブルに IP アドレスを保存し、IP と注文 ID が一致することを確認することもできます。

于 2010-03-28T03:08:41.830 に答える
1

1 つの代替方法は、 Authorize.net の Customer Information Managerなどの支払いプロファイル サービスを使用することです(他にもあります)。API を介してプロファイルに支払い情報を保存し、実際にカードに請求するときにプロファイル ID を使用します。この方法では、サーバーにデータを保存することはありません。

于 2010-06-25T23:14:08.837 に答える
0

同意せざるを得ないと思います。クレジットカード番号を保存することはリスクが大きすぎ、その結果は想像を絶するものになる可能性があります。

理想的な方法は、情報をサード パーティのプロセッサに渡し、返された結果を使用してスクリプト ロジックを形成することです。

if (transaction){
     // code goes here
}
else{
     // code goes here
}

ポイントを理解していただければ幸いです... :)

于 2010-06-25T23:07:19.947 に答える
0

私の専門分野ではありませんが、CSRF攻撃を回避するために、セッションに保存するだけでなく、「同期トークン」(または最近の子供たちが呼んでいるもの)も使用したいと思います。

もちろん、https を (正しく) 使用したり、URL や非表示フィールドに機密データを含めたり、非常に機密性の高い情報を応答に含めたりすることは避けたいと考えています。

于 2010-03-28T03:12:36.020 に答える