アプリケーションのコーディング時の考慮点

 ① 入力チェック
  クライアント側での入力チェック(JavaScript)を禁止する。

 ② 文字列のサニタイジング(クロスサイト・スクリプティング対策)
  出力チェック・ライブラリ(chk_output.aspファイル)をインクルードする。
  テキスト入力:「&」「<」「>」・・・を禁止
  タグ属性値:「&」「<」「>」・・・ →「&amp;」「&lt;」「&gt;」・・・の半角に変換
  HTMLに出力する時点で変換する。 例:<%= Server.HTMLEncode(StrData) %>
  イベント・ハンドラ属性:「onchange」「onmouseover」「onload」「onerror」「script」「<!--」「-->」の入力禁止
  URL属性=「;」「/」「?」「:」「@」「&」「=」「+」「・」・・・の入力禁止
  データベースのエスケープ文字チェック:「'」「;」「or」「|」などの入力禁止

 ③ SQL文のサニタイジング(SQLインジェクション対策)
  入力チェック・ライブラリ(chk_input.aspファイル)をインクルードし、危険文字をエスケープする。
   例:UserlD = Request.Form("userid")
     UserID = Replace(UserID," ' "," ' ' ") ← 「'」は「' '」に変換してエスケープする。
     strSQL ="Select * From TBL where id =" & UserID
     Rs.Open strSQL,Cn

 ④ HTMLのダブル・クォーテーション、シングル・クォーテーション
  値は必ずダブル・クォーテーションで囲む。
  例: <IMG src = <% = URL %>> → <IMG src="<% = URL %>">

 ⑤ 外部スタイル・シートヘのリンク
  スクリプトを不正実行されないようにする。
  列: <link rel="stylesheet" href="<% = CSS %>">
      → if CSS="xxx.css" Then Response.Write "<iink rel="stylesheet "href="xxx.css">"

 ⑥ 情報漏洩・改竄の防止
  3回連続ログインが失敗したら、30分間はログインを許さない。
  セッションの利用:  ID、パスワード、パラメータなどはセッション変数に格納。HIDDEN属性は不可。
  改竄防止:      選択項目、チェック項目の内容を検査する。接続元の資格検査を行う。
  コレクションの明示: 省略すると攻撃される。 例:Request("ID") → Request.querystring("ID")
  Postで受信:     if Request.ServerVariables("HTTP_METHOD") <> "POST" Then エラー

 ⑦ 環境設定
  Webサーバーの親パスを無効に設定する。Server.MapPath(".")を利用して物理パスを利用する。
  データベースのアクセス権の管理は、読み取りと書き込みを分ける。

バックメニュー