ニュースレターをそのメール ID に定期的に送信したいので、bcrypt 後にパスワードを保存していますが、ユーザーのメール ID はプレーン テキスト (暗号化なし) として保存しています。2つ質問がありますか?
データベース内のプレーンテキストとしての電子メール ID をハッカーから保護できるように、データベースを保護する方法は?
特定のデータベース テーブルが、外部からではなく Web フォームからのみアクセスされることを確認する方法はありますか?
注:私はデータベースが初めてです。
ニュースレターをそのメール ID に定期的に送信したいので、bcrypt 後にパスワードを保存していますが、ユーザーのメール ID はプレーン テキスト (暗号化なし) として保存しています。2つ質問がありますか?
データベース内のプレーンテキストとしての電子メール ID をハッカーから保護できるように、データベースを保護する方法は?
特定のデータベース テーブルが、外部からではなく Web フォームからのみアクセスされることを確認する方法はありますか?
注:私はデータベースが初めてです。
1-本当にメールをエンコードしたいが、後でデコードする必要がある場合は、 ENCODE()やDECODE( ) などの MySQL 暗号化関数を確認することをお勧めします。まず、「塩」を設定する必要があります。これは暗証番号のようなものです。次のように、すべてのレコードで同じにすることができます。
SELECT DECODE(email, 'mysecretsalt') FROM Table WHERE id=1
または、次のように、コードとテーブル内の別のフィールドからソルト部分を作成できます。
SELECT DECODE(email, CONCAT('mysecretsalt', id)) FROM Table WHERE id=1
2-データベースに、その特定のテーブルにのみアクセスでき、レコードを追加するときはINSERT権限のみを持つ特定のユーザーを設定し、レコードを取得するときはSELECT権限のみを持つ別のユーザーを設定します。また、それらのユーザーを「localhost」にロックダウンします。ハッカーがそれらのいずれかを取得した場合、彼らは多くのことを行うことができません.
また、リクエスト変数 (GET または POST) の形式で顧客から電子メールを受信した場合、SQL インジェクション攻撃から保護するために、エスケープ文字 (PHP では を使用できますmysqli_real_escape_string()
) を使用するか、単に使用できないすべての文字を削除します。属していません。PHP では、次のようになります。
$email = preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $email);
それが私の好きなやり方です。
電子メールをプレーンテキストで保存することには何の問題もありません。アクセスされたとしても、攻撃者がアカウントにアクセスすることはできません (認証が正しく機能している場合)。私たちが知らない非常に具体的な要件がない限り、それらを暗号化する理由はありません。
一般的にデータベースを保護する場合: