2008-09-11 32 views
9

私はPHP/mySQLセットアップを実装してクレジットカード情報を保存します。mySQLデータベースを安全に保つにはどうすればよいですか?

それはAES_ENCRYPT/AES_DECRYPTが進むべき道であるように思える、

が、私は一点にまだ混乱している:

がどのように安全な暗号化キーを保持していますか?

私のPHPスクリプト(これはdbと同じサーバーにあります)にハードワイヤード接続することは、大きなセキュリティホールのようです。

「ベストプラクティス」ソリューションとは何ですか?

答えて

15

あなたは本当にCC#を保持する必要があるかどうかについて長くて難しく考えるべきです。大きな理由がない場合は、しないでください!もう一週間おきに、会社の一部が侵害され、CC#が盗まれていると聞きました。これらの企業はすべて致命的な欠陥を作りました。トランザクションがクリアされるまでCC#を保持します。その後、削除してください。

サーバーを保護する限り、ハードウェアを保護し、内部システムソケットをMySQLに使用し、MySQLサーバーへのネットワークアクセスを確実にブロックすることをお勧めします。システム権限とMySQL権限の両方を使用して、必要に応じてアクセスを制限するようにしてください。一部のスクリプトでは、書き込み専用認証を検討する場合があります。実際には暗号化の方法はありません(いつでも解読する必要があるため、鍵を保存する必要があります)。これは、あなたがあなたの鍵を1つの場所に格納することができ、システムの侵害を検出した場合、ファイルを破壊してデータを無駄にすることができます。

+0

ビンゴ - 可能な限り、クレジットカードのデータを保存しません。処理して破棄し、PayPalなどのサービスで定期的な取引を処理させる。 – ceejayoz

+2

チャージバックが発生した場合(CCオーナーがトランザクションが間違っていると主張した場合)、CC番号の最後の4桁を保持することをお勧めします。 – BlaM

+3

統計上の理由から、最初の6桁であることもあります。最初の6つは発行銀行を特定するので、1つの銀行からの不正な取引が多いかどうかを確認できるので、悪いケースで複数のクレジットカードをブロックすることができます。 – BlaM

0

私は同意しますが、必要がない場合はCCには同意しません。しかし、あなたも本当にそれを持っている場合、それを持っているファイルがWeb上でアクセス可能でないことを確認してください。キーを返すバイナリを書くことができます。この方法では、クリアテキストで保存されません。しかし、あなたのサーバが妥協しているなら、それを手に入れるのはまだ簡単です。

0

必要なセキュリティはアプリケーションによって異なります。たとえば、cc#が使用される唯一の時間がユーザがログインしているとき(シンオンラインストアタイプのシナリオ)であれば、cc#をプレーンテキストパスワードのハッシュ、ユーザーの塩、および専用のcc#塩が含まれています。この値を永続的に保存しないでください。

この値を保存していないため、この値を取得できるのはユーザーがログインするためのパスワードを入力したときだけです。セッションの有効期限切れとガベージコレクションポリシーが適切に設定されていることを確認してください。

この状況があなたに当てはまらない場合は、あなたの状況をより詳細に記述して、より適切な回答を提供してください。

3

MySQLでは、機密データを保護するために6つの簡単な手順があります。

ステップ1:権限テーブルでワイルドカードを取り外し

ステップ2:安全なパスワードを使用する必要が

注:古いの使用を防ぐために、MySQLの「--secure-AUTH」オプションを使用して、より安全性の低いMySQLパスワード形式。

ステップ3:コンフィギュレーション・ファイルのパーミッションを確認してください

ステップ4:暗号化クライアントサーバ送信

ステップ5:リモートアクセスを無効に

ステップ6:積極的にMySQLのアクセスログを監視

セキュリティツール

関連する問題