【ASP.NET MVC】ASP.NET MVCでの開発時 におけるセキュリティ注意事項

■ ビュー

1) Html.Raw()の使用

以下のケースに限る。

 * 文字列がエンコード済みである
 * 安全な文字列であることが予めわかっている

 => ユーザからの入力値、データベースなどから取得した値は、
    クロス・サイト・スクリプティング対策として、@Xxxx で出力する事
* 「クロス・サイト・スクリプティング」は以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/35715410.html

2) エラーページ

 * 例外情報は表示しない(ログファイルなどに出力する)

■ コントローラ

1) アクションとして使用しないPublicメソッドについて

 * アクションとして使用しないPublicメソッドがある場合、NonAction属性を付与すること
 => そもそもPublicメソッドが必要かも検討した方がいい

2) 入力フォーム画面におけるコントローラ

 * 入力フォームには、ValidateAntilForgeryToken属性で
   クロス・サイト・リクエスト・フォージェリ対策を行う
* 「クロス・サイト・リクエスト・フォージェリ」は以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/35715431.html

3) Fileメソッドの引数について

http://blogs.yahoo.co.jp/dk521123/35727734.html
で使用している Fileメソッドの引数「パス」は、パス トラバーサル対策として
ユーザ指定させない(ファイル名も)
* 「パス トラバーサル」は以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/35715502.html

4) HandleError属性について

 * HandleError属性で、カスタム・エラー・ページを有効にする
http://www.atmarkit.co.jp/ait/articles/0908/14/news041_3.html
http://www.atmarkit.co.jp/ait/articles/0908/14/news041_4.html

■ モデル

1) ユーザ入力値の検証

 * ユーザ入力値は、ラジオボタンやSelectボックスなどの選択するコントロール含めて、
   検証する(これは、知らなかった)


■ データベース関連

1) データベースへのアクセス

 * データベースへのアクセスは、SQLインジェクション対策として、
   LINQ to Entitiesをなるべく利用する
* 「SQLインジェクション」は以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/35715532.html

2) データ削除

 * データ削除は、HTTP GET経由ではなく、HTTP POST経由で行う

■ その他

1) クッキーについて

 * HttpOnlyプロパティを有効にする
 * SSL通信環境下では、Secureプロパティを有効にする

2) ファイルアップロード

 * ファイルアップロードする場合、ファイルの種類やファイルサイズをチェックすること

3) サイトのフォルダ構成について

 * エンドユーザーがアクセスする必要のないログファイル、設定ファイルなどは、
   App_Dataフォルダに配置すること

関連記事

セキュリティ攻撃一覧

http://blogs.yahoo.co.jp/dk521123/25278676.html