[長い、とりとめのない質問をお詫びします。私は、私よりもはるかに知識のある人々からのいくつかの議論/提案を刺激したいと思っています。これが本当にSOに適していない場合は、この種の質問をする場所のヒントを教えてください。]
ASP.NETMVC4アプリがあります。Azure Webロールを使用してホストしています(少なくとも今のところ)。専門の医療面接である私のアプリは、ユーザーから機密情報を収集し、医師や患者が閲覧でき、(暗号化されていない電子メールに添付された暗号化されたPDFファイルを介して)配信できるレポートを作成します。機密データは24時間保持され、医師が戻ってレポートを取得できるようになります。その後、レコードが削除されます(これにより、永続的なストレージからデータが実際に削除されることはありません)。
そのため、機密データの機密を保持するために、セキュリティ境界に関して何を心配する必要があるかについて考え始めています。私は非常に経験豊富なデスクトップアプリ開発者ですが、このWebプログラミング全体に不慣れです。
私が心配する必要がある最初の明白なセキュリティ境界は、サーバーとユーザーの間の通信層です。有効で適切に構成されたSSL証明書があり、ログインしたユーザーを処理するWebサイトのすべてのセクション(インタビューとレポートのワークフローを含む)は、HTTPSエンドポイントを介して動作します。
AzureのSSL実装が正しく、ホスト自体を強化するためにできることやすべきことは何もないと想定/期待しています。
ユーザーの便宜のために、訪問者がhttp://mywebsite.comにアクセスできるようにし、ログインしている場合は[RequiresHttps]のマークが付いたページにリダイレクトします。このHTTPからHTTPSへのリダイレクトは脆弱であることを理解しています。SSLStripのman-in-the-middle攻撃に対して、サーバーは安全なHTTPS接続を認識しますが、警戒しているユーザーはURLがHTTPSではなくHTTPであることに気付くでしょう。この便利な機能を維持する予定ですが、拡張検証証明書を使用することで軽減します。これにより、ほとんどのユーザーに満足のいく緑色のアドレスバーが提供されます。ログインしているユーザーのメインページに、緑色のアドレスバーを確認するようにユーザーに通知するものを配置します。
すべてのCookieが暗号化されるようにASP.NETを構成する方法を理解します。
(Azure展開ウィザードで)リモートデスクトップを有効にしました。これにより、誰かが私のユーザー名とパスワードを把握できる場合に攻撃される可能性のあるポータルが開きます。C'estlavie。
私が心配する必要がある次のセキュリティ境界-そしてこれは私が助けを必要とするところです-許可されていない人がデータベースにアクセスした場合に機密データを保護することです。私のデータベース管理の知識は、接続文字列のコピーと貼り付け、および単純なSQLクエリの記述にかなり限定されています。
私はすべてのデータベースにEntityFrameworkとAzureSQLDatabasesを使用しています。コードに組み込まれたキーを使用して、データエンティティ内の機密データを暗号化します。おそらく、データベース自体は暗号化されており、データベースファイルを入手したばかりの人(Azure SQL DatabasesインターフェイスにはWeb接続を介してアクセスできますが、信頼できるIPアドレスからのみアクセスできます)は、SQLのユーザー名とパスワードを把握してデータ出力。
誰かが私のアプリをだまして機密情報を明らかにする可能性があります。私のワークフローでは、ログインしているユーザーが自分のレコードを読み書きすることしかできません。攻撃者が暗号化された機密データにアクセスするには、暗号化キーを取得するか、コードを呼び出す方法を見つける必要があります。.NETコードを難読化していない。私の実行可能ファイルは安全だと思います。また、データベースのクレデンシャルを含むクリアテキストのweb.configは安全だと思います。 これらは良い仮定ですか?
だから、それは私の初心者の頭脳が私をセキュリティの道に連れて行った限りです。コメントや提案はありますか?間違った仮定をしたり、明らかなことを見落としたりしましたか?