私はPHP 5.6をApache 2.4で使用しています
暗号化する必要があるユーザーに関する機密情報を収集するフォームがあります。私の現在のソリューションは、POST=から機密情報を取得し、データベースを保存する前に、公開鍵を使用して一方向に非対称的に暗号化します。サイトではSSLを使用します。
私の計画は、暗号化されたバージョンを取得し、情報が必要になったときにローカルで復号化することです。データがそれ以上必要ない場合は、完全に削除します。
サーバーが危険にさらされており、ハッカーが上記が起こっていることを知ることができる場合、ハッカーがPOSTデータを収集する前にスクリプトを作成する機会があることを心配していますそれを処理して空にすることができます。
JavaScript経由でフォームを送信する前に情報を暗号化することを検討しましたが、ブラウザでのCPU /メモリの負荷が心配です。
注入されたスクリプトを介してPOSTデータにアクセスできないようにするためのより良い方法はありますか?それとも私はただの偏執狂ですか?
説明:
RSA 16,384ビットの公開鍵/秘密鍵で機密情報を暗号化しています。情報ブロックの平均サイズは8000ビットに近いですが、16,384ビットは極端なユースケースに対応できます。
公開鍵のみがサーバー上にあり、情報をJSON配列に処理してから、PHPのopenssl_public_encrypt()
関数を使用します。次に、暗号化されたブロックをMySQLに保存します。
使用する情報を解読するとき、安全な管理ポータル(HTTPS、CSRFトークン、リサイクルされた一方向ハッシュパスワードの比較)を介して暗号化されたブロックをダウンロードし、ローカルマシンのJavaScriptベースのライブラリを使用して解読します。
これは私の最悪のシナリオです
このプロジェクトの前は、ハッカーが私のシステムにいると、大きな問題が発生するという意見に同意していました。ただし、暗号化の前にこの情報を盗聴するハッカーは、まさに私が抱えている最大の問題です。 CC#ではなく、Stripeと100%PCI準拠で処理しています。
ただし、この情報が侵害された場合、私はそれ以上ではないとしても、同等の責任を負うことになります。
そのため、ローカルで復号化を処理するなど、極端な場合を考えています。機密情報を転送中や保管中に暗号化する必要があるなど、PCIコンプライアンスの基本を読みましたが、そこにも処理中にギャップがあるようです。私がそこで間違っている場合は、ドキュメントを指摘してください。そうすれば、自分自身をよりよく教育することができます。
新しいソリューションを使用しないでください。他の人が行ったものを再利用してください。開始するのに適した場所は [〜#〜] owasp [〜#〜] です。
トランスポートにはSSLを使用し、代わりにブラウザで何らかの暗号化を管理しないでください。
データがサーバーに到達したら、暗号化して保存するかどうか、および暗号化することによって正確に回避したいリスクを評価します。これは暗号化アーキテクチャを推進します(物理的な盗難防止?管理者アクセス防止?...)。
そして、絶対に重要なのは、アプリケーションが正しくコーディングされていることを確認することです。上記のOWASPリンクは、一般的なケースと特定の実装ソリューションを示します(PHPなど))
安全な方法に従ってフォームを設定し( PHPセキュリティガイド:フォーム処理 )、さらに、上記で述べたこと(公開暗号化+ HTTPS)を既に実行している場合は、これで問題ありません。
しかし:
サーバーが危険にさらされており、ハッカーが上記が起こっていることを知ることができる場合、ハッカーがPOSTデータを収集する前にスクリプトを作成する機会があることを心配していますそれを処理して空にすることができます。
サーバーが危険にさらされている状況に到達した場合、攻撃者がPOSTデータを収集するのを防ぐために何をするかよりも、もっと深刻なことを心配する必要があります。
(暗号化)キーを格納する場所/それらの管理方法、およびすべてのユーザーに対して同じキーを使用して復号化するかどうか、またはユーザーごとに1つのキーを使用するかどうかを言うことをお勧めします(ただし、私は最初のオプションで作業すると思います)、その後、この回答を編集します。私は無関心な態度よりも私は偏執狂的な態度を持っている方が良いです。