質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

391閲覧

DBにアカウント情報を保存する

millionx

総合スコア50

IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2018/07/09 11:49

PHPでIMAPサーバからメールを取得しようと思っています。
IMAPサーバに繋ぐときにどうしてもユーザのメールアドレスとパスワードが必要になりますがDBに生で保存しない(opensslで暗号化するなどして)にしても、ソースとDBが流出したらユーザのアカウント情報が解析されてしまいますよね。

この辺りどのようにしたらセキュアに実装できるのでしょうか?
マネーフォワードとかどうやってるんですかね?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ジャストアイディアなんでちゃんとした回答が来たらあっさり取り下げるかもしれませんが

  • どうしたって復号可能な形で持たざるを得ません
  • そこで、IMAPパスワードをユーザーごとに別々のキーで暗号化します
  • そのユーザーごとのキーというのは、ユーザーのログインパスワードに何らかのハッシュ関数をかけたものにします

ユーザー本人にしか生成できないキーになります

  • ユーザーがログイン成功した際にIMAPパスワード復号用のキーもハッシュ関数により作成して、セッションにだけ保存するという形にします。ソースとDBが漏洩してもIMAPパスワードは復号できません。
  • 問題はユーザーがログインパスワードを忘れてパスワード再設定をしたときです。IMAPパスワードは誰にも復号できなくなります。

そのときはそのときで仕方ないんで、IMAPつなぐときにIMAPパスワードを再入力してもらえば良いのではないかなと。

投稿2018/07/09 11:59

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

millionx

2018/07/09 12:24

何かしらをキーにして暗号化するのがいいのかなと思っていましたが、それ以上のアイデアや手法があればなと思った次第です。
退会済みユーザー

退会済みユーザー

2018/07/09 15:30

ブラウザ変えたり、cookie 削除してもアウトかと。 session に恒久的に必要な情報を入れるのはだめだと思います。
guest

0

過去にした質問が参考になりそうなのでリンクしておきます。
暗号化すべき情報とは?

非常に興味深い回答を頂いています。

投稿2018/07/09 13:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

millionx

2018/07/09 13:31

ありがとうございます。読んでみます。
guest

0

ソースとDBが流出したらユーザのアカウント情報が解析されてしまいますよね。

これを前提としたら何やったって無駄なので、「IMAPサーバに繋ぐときにどうしてもユーザのメールアドレスとパスワードが必要になりますがDBに生で保存しない」ここは暗号化しようが平文で保存しようが関係ないことになります。

「ソースとDBが流出し」ないようにアプリケーションを作成することです。

投稿2018/07/09 11:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

millionx

2018/07/09 12:22

平文はシステム管理者に駄々洩れなのでよくないと思います。
退会済みユーザー

退会済みユーザー

2018/07/09 13:15

> 平文はシステム管理者に駄々洩れなのでよくないと思います。 そのレベルの心配をしなくてはならない管理状況であれば、機密情報を取り扱ってはマズイです。。。
millionx

2018/07/09 13:31

>te2jiさん すいません、意図がくみ取れませんでした。
退会済みユーザー

退会済みユーザー

2018/07/09 13:38

一般的に管理者に対しては、教育と契約で縛ります。 それがセキュアでないという状況なのであれば、機密情報を取り扱う資格が無いです。 *ただし、対策をしないということと同意ではありません。 体制に対してセキュリティポリシーの無い場合に見かけるコメントなので、そこから整理されるのが適切です。
guest

0

可逆圧縮、非可逆圧縮をご存知でしょうか?”暗号化”ではなく”圧縮”です。

可逆圧縮の例:zipやlzh←元に戻せる
非可逆圧縮:BMP→png、音などをmp3にしたり。←元に戻せない


似たように可逆暗号化、非可逆暗号化と言うのもあります。

可逆暗号化の場合はkey(アルゴリズム)さえ分かれば復号できますが、非可逆暗号化は暗号化されたワードに対して復号することはできません。

会員登録時に非可逆暗号化アルゴリズムを通したユーザーパスワードをDBに保存しておき、ログイン時に送信されたユーザーパスワードを同一の非可逆暗号化アルゴリズムを行い、DBに保存しておいた非可逆済みパスワードと比較し真偽を確かめる方法もあります。

すべてを非可逆暗号化だと都合が悪いのでメールなどは可逆暗号化(もしくは暗号化しない)、パスワードは非可逆暗号化などをする手法もあります。

投稿2018/07/09 12:47

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2018/07/09 12:53

質問者様の質問内容はそういうことではなさそうです。
tacsheaven

2018/07/09 15:37

定義上、暗号というのは復号して平文に戻せなければ意味がないので、非可逆暗号というのはちょっとおかしな話になるんですけどね。 ※最初から「復号しても意味のない文を発信して、傍受している敵を混乱させる」なんてのは使い方の問題ですし 書かれているのはハッシュ関数等による非可逆圧縮であって、暗号ではないのです。
guest

0

自己解決

何かしらをキーにして暗号化して保存することにします。

投稿2018/07/11 16:08

millionx

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/11 16:33

> 何かしらをキーにして暗号化して保存することにします。 キーにする何かによっては、平文と同程度にしか守られないことを理解していますか?
guest

0

IMAPのどこにRDBが介在するという想定なのかわかりませんが
RDBの情報を元にメールサーバーにアクセスするのが必須であれば
生テキストで保持するしか無いので、DBが流出なんてしたら
すべての情報がだだ漏れですね
そもそもRDBに保持する意味はないので適宜ユーザーが管理すれば
いいだけでは?

投稿2018/07/09 12:00

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

millionx

2018/07/09 12:21

毎回入力してたら大変ですよね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問