8

クレジット カード情報を MySQL データベースに保存しますか?を既に読みました。およびクレジットカード情報の保存

クレジット カード情報の保存には PCI 準拠が必要であることは承知していますが、これは簡単な作業ではありません。

それはこの質問の目的ではありません。私の質問は次のとおりです。

ユーザーのクレジットカードを暗号化する安全な方法は何ですか? 頭に浮かぶ最も単純で簡単なのは、秘密鍵を使用し、それを使用して CC を暗号化することです。キーをサーバーに保存する必要があるため、これはあまり安全ではないようです。攻撃者が私のデータベースを取得できる場合、おそらくキーも取得できる可能性があります。

私ができるようにしたいのは、暗号化プロセスの一部としてそのユーザーのパスワードを使用してすべての CC を暗号化することです。パスワードがソルトハッシュとして保存されているため、誰かがデータベースを取得しても、何も復号化できません。これはトランザクション購入に最適です。ユーザーは「購入」をクリックし、確認としてパスワードを入力し、CC を復号化して請求します。ユーザーのパスワードは、リクエストの間のみメモリ内にあり、ディスクに書き込まれることはありません。

残念ながら、これは私が構築しようとしているサービスでは機能しません。請求する必要があるときにユーザーがログインしているかどうかに関係なく、定期的な料金 (たとえば、月に 1 回) を請求するサービスです。

このシナリオで、ユーザー CC を安全に保存する方法はありますか?

4

6 に答える 6

7

解読できるようにする必要があるため、暗号化キーが漏洩してすべてを失う可能性が常にあります。したがって、絶対的なセキュリティを実現することはできませんが、攻撃者がデータにアクセスするのをより困難にすることはできます。

どのレベルのセキュリティ (またはあいまいさ) を持つべきかを実際に判断できるのは、あなただけです。これは、データベースのサイズ、可視性などの関数である可能性が最も高いです。

漏えいについては、残念ながらすべてが漏えいし、遅かれ早かれ (たとえば、脆弱なパスワードに対するブルート フォース攻撃などで) 漏えいしたときにあまり得られないと想定する必要があります。

最後のクレジット カード漏洩スキャンダルを考えると、最悪のスキャンダルでは、クレジット カード会社が明示的に禁止している通常のクレジット カード番号と一緒に 3 桁の (CVV) 番号が保存されていました (そのため、誰かが不正アクセスした場合でも、常に再度入力する必要があります)。あなたのクレジットカード情報はファイルにあります)

この種のデータを保持および処理する責任を負いたくない場合は、外部の支払いサービスを使用することをお勧めします。外部の支払いサービスに処理を任せて、支払いが処理されたことを主張するだけです。彼らのサービスに対して料金を支払う必要がありますが、独自のソリューションを実装し、リスクを負うことに対しても料金を支払う必要があります。

于 2012-06-15T07:26:28.277 に答える
4

CC暗号化のソルトとしてパスワードを使用すると、情報を保護する非常に効果的な方法になりますが、パスワードを変更することはできません...変更すると、暗号化されたデータが失われます. 暗号化キーを保護するための要点は、できるだけ見つけにくくすることです...基本的に、キーを隠すために使用する手順が多いほど、見つけにくくなります...つまり、あなたはそれを使用してプログラムする必要があります。現時点では、すべてを保護する特効薬はありません。(鍵を安全に保管する方法を発明すれば、金持ちになれます)

CVV 番号については、前述のように保存できません。トランザクションごとに、cc 処理会社がマーチャントに参照番号を提供します。この参照番号は、繰り返し発生する各支払いで使用されます。これは、元のトランザクションで CVV 番号が必要な場合、最初のトランザクションで支払いを行ったのと同じユーザーによって定期的な支払いも承認されることをロジックが指示することを意味します。したがって、繰り返し発生する支払いでは、同じレベルのセキュリティを維持するために CVV は必要ありません。

于 2013-05-25T02:47:49.517 に答える
1

ユーザーが購入するときにphpのプライベート/パブリックopenssl関数を使用し、メモリ内のデータを使用して購入し、公開鍵を使用して情報を暗号化して保存します。

毎月の請求を処理するには、手動で入力したり、コードに保存したりできる秘密鍵を使用してデータを復号化します。SSLキーをコードに保存し、毎回覚えたり取得したりする必要がない場合。構成変数に保存されているソルトを使用してキーを暗号化し、yubi キーを購入して、32 文字のパスワードを生成し、その上に自分のパスワードを追加します。yubikey は安全な場所に保管してください (安全な笑)。クレジット カードを処理する必要がある場合は、バックグラウンドで実行され、すべての請求を一度に実行するスクリプトを使用して処理します。パスワードを変更するには、すべてのカードを復号化し、新しい秘密/公開キーを使用してそれらを再暗号化する必要があります。または、秘密鍵 ssl を復号化して再暗号化するだけでもかまいません。

魔法 :)

于 2014-06-27T16:59:48.380 に答える
1

基本的に、複数のサーバーを使用できます。cc をキーで暗号化しますが、そのキーは別の暗号化サーバーに保管してください。Windows または使用している OS のマスター ユーザー名とパスワードによってのみアクセスできます。このようにして、キーを保護し、暗号化サービスでサービスをセットアップして、暗号化を介してカードを実行し、データベースに送信します。

于 2014-03-25T21:06:02.413 に答える
0

カード情報を可逆的に暗号化する必要があります。復号化情報はどこかから取得する必要があります。データをユーザーから取得することはできず、サーバーに保存したくないと述べたので、おそらくより安全な別の機器にある必要があります。そして、その情報を思い出す能力があれば、システムを侵害した攻撃者も思い出すことができます。そのため、復号化中に脆弱なホストで復号化情報が取得されない可能性があります。

おそらく、暗号化して情報を送信できるサードパーティのサービス、おそらく PCI コンプライアンスを専門とするサービスを検討してください。2 度目にクレジット カード情報を送信して請求を適用するときに、クレジット カード情報を解読できる可能性があります。また、後で使用するために実際にカード情報を保存することもできます。定期的なトランザクションを実行することさえあります。

http://www.authorize.net/solutions/merchantsolutions/merchantservices/automatedrecurringbilling/

私はそれをグーグルで検索しましたが、お勧めしません。しかし、それは一例です。

于 2012-06-15T07:21:56.023 に答える
-1

CC 情報を 2 回暗号化します。まず、ユーザーのパスワード (+ ソルト) に基づいてクレジット カード データを暗号化します。次に、その出力をサーバーのキーで暗号化します。

したがって、情報にアクセスするには、ユーザーのパスワードが必要です (つまり、サーバーのキーを使用して復号化し、パスワードに基づいて復号化します)。データベースとサーバー キーが侵害された場合でも、最初にユーザーのパスワードを攻撃しない限り、情報は公開されません。

ユーザーのパスワードは内部暗号化用であることが重要です。これにより、サーバーの暗号化キーを変更するときに再暗号化できます。

ユーザーがパスワードを変更すると、データも再暗号化されます。ユーザーがパスワードをリセットすると、CC 情報は消去されます (暗号化を解除できないため、とにかく失われます)。

于 2015-10-05T07:29:46.290 に答える