2017-12-04 24 views
2

私は、私たちのサーバーの1つにコンソールアプリケーションをリリースして、毎日タスクスケジューラによって実行されようとしています。特定の条件に基づいて、アプリケーションはOffice 365を通じて選択したユーザーに電子メールを送信します。ユーザーに電子メールを送信するには、もちろん、電子メールアカウントの資格情報を使用する必要があります。パスワードを内部コンソールアプリケーションに埋め込む

私たちのサーバーの内部アプリケーションであることを考えれば、コードセーフにユーザー名とパスワードを埋め込んでいますか?そうでない場合は、これを安全に回避するためのベストプラクティスは何ですか?

それが助け場合は、これは(C#で書かれた)電子メール機能のために私のコードです:

String userName = "[email protected]"; 
String password = "myPassword"; 

MailMessage msg = new MailMessage(); 
msg.To.Add(new MailAddress(user.getEmail())); 
msg.From = new MailAddress(userName); 
msg.Subject = "My Subject"; 
msg.Body = "My message"; 
msg.IsBodyHtml = true; 
SmtpClient client = new SmtpClient(); 
client.Host = "mail.office365.com"; 
client.Credentials = new System.Net.NetworkCredential(userName, password); 
client.Port = 587; 
client.EnableSsl = true; 
client.Send(msg); 

編集:私は、管理者だけが、この特定のサーバーへのアクセス権を持っていることを追加する必要があります。

+0

なぜあなたはApp.Configの中のパスワードを暗号化してそこから読まないのですか?.Confgセクションを暗号化する方法についてのGoogle検索はハードコーディングよりも簡単にコードをリファクタリングするので、オブジェクトの自動廃棄は 'using(){}'構造体を使用します – MethodMan

+0

いいえ、これは安全ではなく、侵害されたパスワードの場合は柔軟性がありません。これらの値は、インストール/最初の実行時に構成として収集する必要があります。 – spender

+0

明確にするために、管理者だけがこの特定のサーバーにログインするためのアクセス権を持っています。 –

答えて

0

そのコードやアプリケーションにアクセスできる人は誰でも簡単にアカウントにパスワードを取得できます。

リスクと報酬についてです。悪質なプレーヤーがコードやサーバーにアクセスした場合、誰かが簡単に回復またはシャットダウンできるメールアカウントにアクセスできるよりも、心配する大きな問題があることは間違いありません。

この結果を防ぐには余計なトラブルがありますか?それはあなた次第です。

おそらく、構成の詳細は、パスワードが期限切れになると簡単に変更できるように、少なくともApp.configに含まれている必要があります。そうしないと、ソリューション全体を再コンパイルして再デプロイする必要があります。

できるだけ安全にしたい場合は、コンフィギュレーションファイルの暗号化を実行するためのさまざまな手段を検討するのが理想的です。 c# encrypt configurationの簡単な検索では、始めるのに十分な資料があります。

1

はもちろん

ない安全なコードにユーザー名とパスワードを埋め込むれます。まともな保護なしで資格情報を格納することは決して安全ではありません。コードまたは実行可能ファイルにアクセスするすべてのユーザーは、資格情報を抽出できます。

私があなたの場合、サービスユーザーだけがアクセスできる場所で実行されるマシン上の暗号化されたファイルにこれらの資格情報を格納します。デバイス固有の鍵でファイルを暗号化します。他のユーザーがファイルを取得できる場合でも、復号化できないため、他のユーザーは使用できません。