Open8

[読書記録]体系的に学ぶ 安全なWebアプリケーションの作り方

うどんうどん

3-1 HTTPとセッション管理

  • 認証と認可の違い
    • 認証: 利用者が確かに本人であることを何らかの方法で確認すること
    • 認可: 認証済みの利用者に権限を与えること

3-2 受動的攻撃と同一オリジンポリシー

  • 受動的攻撃
    • webサイトの利用者に罠を仕掛けて、罠を閲覧したユーザを通してアプリケーションを攻撃する手法
  • 同一オリジンポリシー
    • 異なるオリジン間でのリソースアクセスを制限することでXSSやCSRFなどからユーザーを保護する
    • ホスト名、スキーム、ポート番号が一致していること

3-3 CORS(Cross Origin Resource Sharing)

  • クロスオリジン
    • ウェブブラウザで異なるオリジン(ドメイン)間のリソースアクセスやデータのやり取り
    • Access-Controll-Allow-Origin:許可するドメインだけで許可できる
  • シンプルなリクエストの要件
    • がちがちに決められてるの面白い
  • WithCredentialsプロパティ
    • ウェブページが他のサイト(オリジン)にデータを取りに行くときに、クッキーやログイン情報 を一緒に送るかどうかを決める設定
    • サーバーは、Access-Control-Allow-Credentials: trueヘッダーを返す必要がある
うどんうどん

4-2 入力処理とセキュリティ

  • 文字エンコーディングの妥当性検証からはじまる
  • 入力値検証
    • バリデーション処理
    • セキュリティのためではない
    • アプリケーション要件にもとづいた基準になる
    • 制御文字とは
      • 改行やタブなど、通常表示されることのない文字のこと
うどんうどん

4-3 表示処理に伴う問題

  • 反射型XSS
  • 持続型XSS
  • XSS脆弱性が生まれる原因
    • HTML生成の際にHTMLの文法上特別な意味を持つ特殊記号(メタ文字)を正しく扱っていないこと
      • エスケープが必要
      • htmlspecialchars便利
うどんうどん

4-4 SQL呼び出しに伴う脆弱性

  • 文字列リテラルをはみ出した部分からSQLインジェクションが発生
    • 檻から出たライオンの例がわかりやすい
  • 静的プレースホルダはプレースホルダの状態でSQL文がコンパイルされるためSQL文が後から変更される可能性は原理的にはない
うどんうどん

4-5 重要な処理の際に混入する脆弱性

  • CSRF攻撃対策
    • CSRF対策の必要なページを区別する
      • すべてのページに対策が必要なわけではない
    • 正規利用者の意図したリクエストであることを確認する
      • 第三者に予測不可能なトークンの埋め込み
      • パスワード再入力
      • Referer確認
    • 保険的対策として確認メールの送信がある
  • クリックジャッキング
    • 悪質すぎ
    • X-Frame-Options
うどんうどん

4-6 セッション管理の不備

  • 推測、盗聴、強制
  • セッションID生成を自前でやるな
  • UR埋め込みのセッションIDがRefererによって漏洩する例
  • 固定化攻撃
  • 対策
    • 認証後にセッションIDを変更する
    • クッキーにセッションID保存する
    • 認証前にはセッション変数に機密情報を保存しない
うどんうどん

4-7 リダイレクト処理にまつわる脆弱性

  • オープンリダイレクト脆弱性
    • 原因
      • リダイレクト先のURLを外部から指定できる
      • リダイレクト先のドメイン名のチェックができない
    • 対策
      • リダイレクト先のURLを固定する
      • リダイレクト先のURLを番号指定にする
      • リダイレクト先のドメイン名をチェックする
  • HTTPヘッダー・インジェクション
    • HTTPレスポンスヘッダの出力処理で発生する恐れのある脆弱性
    • パラメータに改行を挿入することにより新たなHTTPレスポンスヘッダを追加する攻撃
    • PHPのHTTPレスポンスヘッダ出力機能
      • クッキー生成:setcookie/setrowcookie
      • リダイレクト:なし(headerを利用)
      • レスポンスヘッダ出力:header
うどんうどん

4-8 クッキー出力にまつわる脆弱性

  • クッキーの不適切な利用
    • ユーザIDや権限情報は保存しない
    • セッション変数に保存するべき
  • クッキーのセキュア属性不備
    • 直接の原因はセキュア属性をつけてないということだけ
      • なぜつけていないのか→セキュア属性がつけられないアプリケーションがある
        • HTTPとHTTPSが混在している場合