1

ニュースレターをそのメール ID に定期的に送信したいので、bcrypt 後にパスワードを保存していますが、ユーザーのメール ID はプレーン テキスト (暗号化なし) として保存しています。2つ質問がありますか?

  1. データベース内のプレーンテキストとしての電子メール ID をハッカーから保護できるように、データベースを保護する方法は?

  2. 特定のデータベース テーブルが、外部からではなく Web フォームからのみアクセスされることを確認する方法はありますか?

注:私はデータベースが初めてです。

4

2 に答える 2

1

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);

それが私の好きなやり方です。

于 2013-05-16T17:27:55.577 に答える
0

電子メールをプレーンテキストで保存することには何の問題もありません。アクセスされたとしても、攻撃者がアカウントにアクセスすることはできません (認証が正しく機能している場合)。私たちが知らない非常に具体的な要件がない限り、それらを暗号化する理由はありません。

一般的にデータベースを保護する場合:

  • データベースのドキュメントを読む
  • 複数のサービス/スクリプトがデータにアクセスしている場合は、それらが別々のアカウントを持ち、アクセスする必要があるデータにのみアクセスできることを確認してください
  • データベースのバックアップが少なくともデータベース自体と同じくらい安全であることを確認してください
  • アカウントのソース ホストを制限して (おそらくユーザーを設定するとき)、Web フロントエンドからの接続のみを許可するか、同じホストで実行している場合は、ループバック以外のすべてを無効にすることができます (データベースを 127.0.0.1 にバインドします)。
  • ...他にもたくさんのことが可能ですが、基本から始めてください...ドキュメントでより多くのアイデアを見つけることができると確信しています
于 2013-05-16T17:07:04.820 に答える