* Webページ共通 [#s169c366]

** 文字コード [#nc7058f6]
- Htmlとしてレンダリングされるファイル(*.aspx,*.ascxなど)の文字コードと、Content-Typeで指定する文字コードは一致させる。
- WebForm(*.aspx), ユーザーコントロール(*.ascx)ファイルの文字コードは、UTF-8とする。
- ただし、モバイル用Webページの文字コードについては、旧機種への対応のため、Shift_JISとする。

** ページキャッシュ [#c45801cf]
- キャッシュの設定はパフォーマンスとリアルタイム性のトレードオフになるため、十分に検討して設定すること。

** セッションタイムアウト [#rf28e2c2]
- あらゆる画面でセッションタイムアウトは発生する。安全に処理が中断されるように設計すること。

** ブラウザアクションへの対応 [#o9955e62]
- 「戻る」「進む」をはじめ、ページの「更新」「ソースの表示」等のブラウザアクションについて、機能的に問題がないか十分に考慮すること。

** ポップアップ画面 [#h9b67136]
- ポップアップ画面開発の際には、複数起動されることや、タブブラウザを利用される可能性を考慮すること。

** 例外処理 [#i8e763d7]
- 例外処理は、Global.asaxや基底ページ等で共通化すること。
-- ただし、個別の例外処理は、個々のページで実装すること。
- なにはなくても、以下の2つはcatchし、IISデフォルトのサーバーエラーページが出力されないようにする。
-- SesssionTimeOut
-- 予期せぬシステムエラー
- HTTP Status 400番台の処理はIISに任せ、妥当なエラーページを作成する。

** アプリケーションパス [#v5ee062c]
- Webアプリケーション名は、URLの一部となる。後で変更できるように、ソースコード中にWebアプリメーション名を記述しないように注意すること。
-- サーバーコントロールのプロパティでは、「~(チルダ)」を指定することで、Webアプリケーションのベースフォルダが指定できる。
-- JavaScriptや、生HTMLのhref属性やonclick属性に記述する際には、「~(チルダ)」は使用できない(URLとして誤記になる)ので、<%= Request.ApplicationPath %>スクリプトレットを使用する。ただし、スクリプトレットはaspxファイル内でのみ有効で、JavaScript外部ファイル(*.js)内では無効であることに注意すること。

** ポストバック後のスクロールの位置の復元 [#eb0af5ad]
- 標準の状態では、ポストバック発生後にページを表示すると、スクロール位置は復元されない。
- web.configのpagesにmaintainScrollPositionOnPostBack="true"を付加する事で全ページに対して、スクロールの復元を可能とする。

** シリアル化できないオブジェクトを、Sessionに格納しない [#c8b8ae4b]
- セッション管理をinProc以外で実現した場合にも、正常に動作させるため。
- また、データサイズの大きなオブジェクトを、不要にセッションに格納しないこと。性能の劣化を招くだけでなく、メモリやストレージを圧迫したりする。
- ちなみに、ViewStateにシリアル化できないオブジェクトを保存することはできない。

** できるだけ、Session_OnEndイベントを利用しない [#a1ed608b]
- セッション管理をinProc以外で実現した場合に、Session_OnEndイベントハンドラは正常に動作しないため。


* Webコントロール [#i889561a]

** コントロールの基底化 [#o04872f1]
- .NET Framework標準のWebコントロールは直接利用せず、継承したクラスを共通利用すること。(例:TextBoxコントロールをExTextBoxコントロールとして継承・拡張し利用する。)
-- 同種のコントロール全てに、同じ実装を追加したい場合には、その基底クラスに実装するとよい。
- 同種のコントロールの一部に、同じ実装を追加したい場合には、その基底クラスを更に派生させたクラスに実装するとよい。(機能のクラス階層化)
- 特に、Pageクラスは基底クラスを必ず作成してから、開発を始めること。


* バリデーション [#m6127f39]

** コントロールの基底化 [#r3ca071e]
- .NET Framework標準のValidatorコントロールは直接利用せず、継承したクラスを共通利用すること。
-- 全てのコントロールに同じ実装を追加したい場合に、その基底クラスに実装する。


* セキュリティ対策 [#vf8bca60]

** ボタン2度押し [#jec1b36f]
- TransactionToken機能を実装し、DBアクセスを伴うボタンの2度押しを防止すること。
※ StrutsのTransaction Tokenと同機能と考えてよい。
-- 登録処理が実行されるボタンには必須。
- JavaScriptだけに頼らない。

** クロスサイトスクリプティング(XSS) [#rdda394e]
- ユーザー入力値や、DBから取得した値をWebページにHTMLレンダリングされる際には、無害化処理(サニタイジング)を行う必要がある。
- 基本的には、拡張Webコントロール内で無害化処理を共通化し、個別に無害化するのは、JavaScript等のリテラル処理のみとする。
- 個別に実装する場合は、HttpServerUtility.HtmlEncode ()メソッドを利用する。
-- aspxファイルのPageディレクティブのvalidateRequest属性をtrueに設定することで、「<」文字などの入力をエラーとすることも可能だが、XSS対策として完全でない上に、入力不能な文字を生んでしまう。validateRequest属性には頼らない。
http://msdn2.microsoft.com/ja-JP/library/system.web.httprequestvalidationexception.aspx

** URLクエリ文字列の無害化 [#kc0ae713]
- URLのクエリ文字列に使用されるクエリ値は、HttpUtility.UrlEncode()メソッド、あるいは、Uri.EscapeEncode()メソッドを使用し、無害化を行う事。
- また、クエリ名称は無害化の必要のない文字列とすること。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS