アプリケーションのコーディング時の考慮点 |
① 入力チェック クライアント側での入力チェック(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(".")を利用して物理パスを利用する。 データベースのアクセス権の管理は、読み取りと書き込みを分ける。 |