The Document of Aska

Webアプリケーション作った後のチェック表

2011/05/22 追記: セキュリティ対策について勉強するにはIPA 安全なウェブサイトの作り方体系的に学ぶ 安全なWebアプリケーションの作り方等をお勧めします。

チェックリスト

  • XSS対策
    • Text::Xslate等、自動エスケープに対応したテンプレートエンジンを利用している
    • <script>要素の中に動的な埋込みをしていない
    • プログラム中でHTML生成を行う場合、要素の属性値のセット時にエスケープしている
  • CSRF対策
    • 更新系処理の際、パラメーターのセッションID等でユーザの意図した操作で来たリクエストである事を検証している
  • Session Fixation対策
    • ログイン処理の際必ずセッションIDを再発行している
  • OSコマンドインジェクション対策
    • system / exec 等システム関数を利用する場合、引数は配列で渡している
    • 出力結果が欲しい外部コマンド呼び差しには3引数のopenを使用している
  • SQLインジェクション対策
    • SQL文にユーザの入力値を含めていない
  • 乱数予測対策
    • パスワードの自動生成等、乱数生成にrandを使用していない、/dev/uradomを使用している。
  • ディレクトリトラバーサル対策
    • ユーザの入力文字列からファイルパスを求めるような場合、../等で上位ディレクトリを参照されないように入力チェックの上、basenameを介している
  • セッションハイジャック対策
    • セッションIDの生成はモジュールに任せている
    • HTTPS利用時、Cookieにsecureフラグを付与している( LB等配下の場合等注意 )
    • ログアウト時、明示的にセッションを破棄している
    • セッションIDはCookieに格納し、URLで引き継がない(refererに残る)
    • 携帯用サイトでやむを得ずURLにセッションIDを含める場合、他サイトへのリンクはリダイレクト用URLを踏ませている
    • 上記のリダイレクト処理で、URLに改行等を含まれると任意のヘッダーを挿入される為、ヘッダーはモジュールで生成している
  • HTTPヘッダインジェクション対策
    • Locationヘッダー等特定ヘッダーを出力する際、ヘッダーの生成はモジュールに任せている
    • print "Location: ", $q->param('url'), "¥n"; だとSet-Cookie等埋め込む余地が生まれる
  • 強制ブラウズ対策
    • アクセス制限が必要なリソースに対してアクセス制限を行っている
    • デバッグ用ページをバレないだろうと安易に置いておかない、アクセス制限を行う
    • どんなURLで何が公開されているのかディレクトリレベルで構わないので構成図を起こしてチェックしている
  • パスワード攻撃対策
    • アカウントロック機能を備えている
  • 情報漏洩対策
    • パスワードはソルト付きでハッシュ化して保存している

ツール

  • Live Http Headers (Add-ons for Firefox)
  • WATProxy
  • Burp Proxy
  • Proxomitron Version Naoko
  • Nikto Version 2.1.0