Webアプリケーションのセキュリティ
どんな危険性がある?
「安全なWebアプリケーションの作り方」p.68の図
Webアプリケーションの機能と脆弱性の対応
出力に起因する脆弱性:インジェクション系脆弱性
処理に起因する脆弱性:CSRFなど
攻撃パターン
能動的攻撃:Webサーバに対して直接攻撃(例: SQLインジェクション)
受動的攻撃1:罠サイトに利用者を誘導(例:ウィルスなどに感染させる)
受動的攻撃2:正規サイトに罠が仕込まれる
受動的攻撃3:罠サイトと正規サイトをまたがった攻撃(例: CSRF, XSS)
Webブラウザ側での対策
サンドボックス
ブラウザ内でプログラムを実行する場合の制限
ローカルファイルへのアクセスの禁止
プリンタなどの資源の利用禁止
ネットワークアクセスの制限(同一生成元ポリシー)
JavaScriptによるサイトをまたがったアクセスを禁止
Webアプリケーションに脆弱性があると受動的攻撃を受ける可能性がある
具体例
インジェクション
HTML, HTTP, SQL, OSコマンドなど:すべて、ある書式に従ったテキスト形式でデータや処理を記述
多くのWebアプリケーションでは、テキストの構造をあらかじめ決めておいて、データ(文字列)をそこに流し込む
流し込む文字列に、設計時には意図しないものを混入させることで、データや処理を設計者の意図しないものに変えてしまう
HTMLインジェクション
HTMLの特殊記号(メタ文字)のエスケープ処理漏れ
< → < など
結果として、ブラウザ上でJavascriptプログラムが実行されてしまう
クロスサイトスクリプティング(XSS)につながる
XSS: 攻撃者が用意したスクリプトの実行により
クッキー値を盗まれる
偽の入力フォームが表示され、利用者の個人情報を盗まれる
対策
HTMLの特殊文字のエスケープ処理
<, >, &
属性値については " や ' も
例
Yahoo! ウォレットのフィッシング
SQLインジェクション
対策
プレースホルダによるSQL組み立て
プレースホルダを含んだSQL文(文字列)を組み立て(事前)
SQL文コンパイル(事前)
プレースホルダに入力値をあてはめてSQL実行
構文解析を事前に済ませることがポイント
SQLインジェクションの原因:入力値をもとに組み立てたSQL文を実行(構文解析)してしまうのが原因
OSコマンド・インジェクション
対策
流し込む文字列の検証:これだけでは不十分(設計者の想定しなかった文字列が混入されたら検証をすり抜けるかも)
CSRF
利用者がログインした状態で罠サイトを閲覧することで、利用者のブラウザから勝手に「重要な処理」を実行させられる
重要な処理:パスワードの変更、クレジットカード決済など
例
なりすまし事件
関連スライド参照
Last updated
Was this helpful?