4

私が働いている会社の管理パネルを開発していて、何か疑問に思っていました。従業員の経験を増やしたい。ログイン資格情報を入力してメールに接続し、管理パネル内でメールを読むことができるようにしたい. 私が助けを必要としているのはこれです:

imap_open 接続を確立する場合、プレーン テキストのパスワードが必要です (私の知る限り)。ハッカーがデータを手に入れたら大惨事になることを知っているので、パスワードをデータベースに安全に保存することはできません。

基本的に、私はしたい:

  • ENCRYPTEDパスワードを使用して imap_open 接続を作成します。できればbcryptとして。

これを行う方法を知っている人はいますか?Google で検索したり、stackoverflow に関する他の質問を見たりしましたが、質問に対する答えが見つからないようです。パスワードをプレーンテキストとして保存することは決してありません。そして、COOKIEまたはSESSIONを使用するだけでは面倒です..ログイン時に適切な管理者アカウントに電子メールをロードするだけでよいのに、管理者が常に電子メールにログインするのは面倒です.

4

3 に答える 3

1

私が正しく理解している場合、あなたは次のことを望んでいます:

  • ユーザーのパスワードを自分のマシンに安全に保存する
  • それを使用してメールサーバーに接続します
  • メールをダウンロード

ユーザーのパスワードをプレーンテキストで保存することは、明らかに禁止されています。これを処理するにはさまざまな方法があります。アプリケーションは実際にユーザーにパスワードを要求することができます。これは簡単ですが、あまり便利なソリューションではありません。

通常、パスワードは SHA256 や bcrypt などの一方向ハッシュ スキームを使用して保存されますが、これは、パスワードが一致するかどうかしか確認できないことを意味します。パスワードを取得して別の場所に送信することはできません。したがって、対称鍵暗号化に目を向ける必要があります。暗号化されたパスワードをどこか (データベース内) に保存し、必要なときにそれを取得して復号化し、IMAP 接続を介して送信します。暗号化の問題は、ある時点で危険にさらされる可能性があるキーに依存していることですが、キーを取得する必要がある場合、ハッシュはオプションではありません。

もう 1 つ注意すべき点は、パスワードを平文で送信するリスクです。サーバーがSSLを使用している場合、これは非常に重要です。

于 2014-04-27T17:56:43.757 に答える
-1

はい、もちろん AUTHENTICATE PLAIN はパスワードをエンコードします。ただし、管理者アクセスをサポートするサーバーでは、管理者のパスワードとユーザー名をエンコードできるため、ユーザーのアカウントにアクセスできます。

$login_str = sprintf("%s\x00%s\x00%s", $user_name,$admin_name,$admin_pwd);

$login_str = encode_base64("$login_str", "");

AUTHENTICATE PLAIN ログインでエンコードされた文字列を使用すると、ユーザーのアカウントにアクセスできます。また、ユーザーのパスワードは必要ありません。

これを AUTH PLAIN で行うと...

sprintf("%s\x00%s\x00%s", $user_name,$user_name,$user_pwd);

次に、ユーザーのアカウントにアクセスします。しかし、管理者の資格情報を提供すると、OPがパスワードを保存せずにやりたいことを行うようです。

于 2014-04-28T20:13:32.047 に答える