1. ホーム
  2. c#

[解決済み] web.config内に保存されたパスワードを保護するにはどうすればよいですか?

2022-03-02 07:55:22

質問

外部システムへのAPIコールを開始するために、web.configファイル内に以下の設定を追加しました。そのため、API URL + ユーザー名 + パスワードを以下のように保存しています。

<appSettings>
    <add key="ApiURL" value="https://...../servlets/AssetServlet" />
    <add key="ApiUserName" value="tmsservice" />
    <add key="ApiPassword" value="test2test2" /> 

そして、アクションメソッド内で、以下のようにWebクライアントを構築する際にこれらの値を参照することになります。

public ActionResult Create(RackJoin rj, FormCollection formValues)
        {
           XmlDocument doc = new XmlDocument();
           using (var client = new WebClient())
                {
                    var query = HttpUtility.ParseQueryString(string.Empty);
                    foreach (string key in formValues)
                    {
                        query[key] = this.Request.Form[key];
                    }

                    query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"];
                    query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"];

                    string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"];

しかし、私はユーザー名とパスワードを公開し、これらはユーザーがキャプチャすることができますので、私の質問は、どのように私は、APIのユーザー名とパスワードを確保することができますか?

解決方法は?

一般的に、web.configは安全なファイルであり、IISはそれを提供しないため、Webサーバーにリクエストを行うユーザーに公開されることはないでしょう。Webサーバーは特定のタイプのファイルのみを提供し、web.configは確かにそのうちの一つではありません。

多くの場合、データベース接続文字列を保存し、その中にはパスワードも含まれています。さて、web.configが安全でなかった場合のシナリオを想像してみてください。あなたのアプリケーションに大きなセキュリティ上の脅威を作り出しているのです。

ですから、プロジェクトの規模が大きくない限りは、特に心配する必要はないでしょう。

しかし、より良い方法は、"Resources"というプロジェクトを作成し、設定、const、enumなどの重要な情報をすべてそこに保存しておくことです。そうすれば、スマートで整理されたアプローチになるでしょう。

もし、ユーザー名やパスワードを無線でやり取りする場合(例えば、安全な API 呼び出しの場合)、https を使用して、やり取りする情報が暗号化されていることを確認したいかもしれませんが、それは web.config ファイルのセキュリティとは何の関係もありません。