会社という「体」は色々な要素で構成されています。  「顔」であるホームページ作成、「手足」となるスタッフを効率良く動かすための「神経信号」となる「共有ツール」、「エネルギー」である資金を管理するための「会計ツール」etc...  そんな「体をメンテナンス」についてお手伝いをするのが、私たちの務めです。
ASP.NET MVC セキュリティ設定

ASP.NET MVC セキュリティ設定

 

ASP.NET MVCを用いたセキュリティ設定を調べてみました。

 

1.ユーザ権限管理

MVCフレームワークには、標準でアカウント画面が付いています。

これを利用し、特定のユーザのみ、サービスにログインできるようにしてみます。

手順は、コントローラのCreateアクション等にロールを設定するだけです。

1)アプリケーション管理ツールを使用してユーザを作成します。

→VS2008ではメニューのプロジェクト→ASP.NET構成で起動できます。

2)ロール「Admin」を作成し、Adminに属したユーザ「admin」を作成します。

 

 

3)コントローラの遷移先アクションに、ロールを設定します。

→Authorize属性でロール「Admin」を指定しています。

 

        //
        // GET: /Address/Create

        [Authorize(Roles = "Admin")]
        public ActionResult Create()
        {
            return View();
        }

 

以上で設定は終わりです。早っ(笑)

ロールを設定した画面へアクセスすると、ログオン画面が表示されます。

ログオン後、サービスへ入れるようになります。

 

 

以下蛇足になりますが、上記のユーザ管理情報は、プロジェクトの¥App_Data¥ASPNETDB.MDFファイルにSQL Serverファイル形式で保持されていますが、セキュリティ管理のしやすいDBサーバーに移行することも可能です。

※以下のサイトが大変参考になりましたm(_ _)m

どっとねっとふぁんBlog : レンタルサーバでログインコントロールを利用する

2.リクエスト元検証

リクエスト元が、必ず特定の所であることをチェックします

※登録処理であれば指定の登録画面がリクエスト元であるか等

チェック方法として、リクエスト元でトークンを生成・ポストし、リクエスト先でトークンをチェックする感じです。

まず、リクエスト元のビューにトークンを生成するコードを埋め込みます。

 

    <p>
        <%= Html.AntiForgeryToken() %>
        <input type="submit" value="Create" />
    </p>

 

AntiForgeryTokenメソッドで、トークンをポストする隠しタグを生成します。

HTMLソースを覗くと下記のような感じで出力されていました。

 

<input name="__RequestVerificationToken" type="hidden"
value="HxtOUtturWYbv8T8kz/fpQMfPUP50dictKYTkyKX/dF/BCyTuhTj6J8Z20l8/WZ73SefSoZPk61fiC2Mfnb+rw==" />

 

次に、コントローラのアクション側に、トークンを受け取りチェックする属性を付与します。

指定のアクションに、ValidateAntiForgeryToken属性を追加して終わりです。

 

        //
        // POST: /Address/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Address ad, FormCollection collection)
        {

実際に不正アクセスして弾かれるか確認したい!という方は以下の方法で確認できます。

※CSRF対策を有効化~という部分を参考

第4回 フィルタ属性による認証/キャッシュ/セキュリティ対策の実装 - @IT

3.クロスサイト スクリプティング阻止

スクリプトタグ等が混入された文字列を無害化する方法です。

詳細画面等でコントローラから受け取った値をダイレクトで出力せずに、 Html.Encodeにてエンコード済み文字列を出力するようにします。MVCフレームワークを使用し詳細画面を生成した場合は、デフォルトで下記のように記載されています。

 

<%= Html.Encode(Model.name) %>

4.SQLインジェクション阻止

LINQを使用すれば防げます(詳細は以下のサイト参照)。

ASP.NET MVCのセキュリティ対策とクライアントサイドスクリプト活用方法

5.エラー画面変更

デフォルトのエラー画面ではエラー個所のソースコードが丸見えになってしまうので、自分で作成した画面に差し替えて隠ぺいいます。

以下に、カスタムエラー画面を表示しつつエラーログを出力する方法がわかりやすく紹介されています。

[ASP.NET MVC]例外フィルタをカスタマイズするには?[3.5、C#、VB]

セキュリティ絡みで必要なものがあれば、後で自分が忘れないよう追記する予定です。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください