独習Javaサーバサイド編第2版 第10章まとめ

クロスサイトスクリプティング(XSS:CrossSiteScripting)脆弱性

エスケープ処理の不備などが原因でエンドユーザからの入力などによって生成されるページで、不正なスクリプトを混入/実行されてしまうセキュリティーホールのこと

対策

アプリケーションによって生成されるすべての値に対してHTMLエスケープ処理を施す(< > &のようなHTML予約文字を< > &のような無害な文字に置き換えること)
Functionタグライブラリのfn:escapeXml関数を利用する

SQLインジェクション

SQL命令に不正なパラメータを引き渡すことで本来開発者が意図していなかったSQL命令が生成/実行されてしまう脆弱性のこと
結果的に公開されるはずでなかった機密情報が漏洩したり重要なデータが削除されてしまう可能性がある

対策

SQLエスケープで、文字列の終了を表す'を"に置き換えることで、予約文字'を無効化する
JDBCを利用している場合、PreparedStatementオブジェクトのプレースホルだ機能を利用すると、内部的にこのようなエスケープを実行してくれる

クロスサイトリクエストフォージェリ(CDRF:Cross-Site Request Forgeries)

サイト攻撃用のスクリプトを仕込んでおくことで、アクセスしてきたユーザに意図せぬ操作を強制させる攻撃
あるサービスに勝手に登録されてしまったり、掲示板やブログに勝手に書き込みされてしまったり、ショッピングサイトで自動的に物品を購入されてしまったりする可能性がある

対策

HTTP GET要求でランダムな文字列(トークン)を生成、入力フォームに隠しフィールドとして埋め込む
トークンとはリクエストが正しいページから送信されたものか確認する一種の証明書
HTTP POSTによるリクエスト処理時にアプリケーション側で保持しているトークンと、リクエスト情報として送信されるトークンとを比較し、一致していれば処理を行う
トークンがない、一致しないときは処理を中断
トークンはランダムに生成されるので類推ができないはず、結果フォーム以外からのデータ送信を防げる
このような手法をワンタイムトークン方式という

パストラバーサル

本来想定していたパスを遡って自由にファイルを読み書きされてしまう脆弱性のこと

対策

リクエスト情報として直接ファイルのパスを受けわたさないこと
どうしてもなときはホワイトリスト(操作を許可する対象のリスト)を作るなどして、ファイル名をチェックするようにする

Cookieクラスの設定パラメータ

(1)ドメインsetDomain)/パス(setPath)
クッキーが有効となるドメイン(インターネット上にあるコンピュータやネットワークを識別する名前)/パスを指定
(2)SSL接続(setSecure)
このパラメータがtrueの場合、暗号化通信の環境でのみクッキーを送信する
(3)HTTP経由(setHttpOnly)
このパラメータをtrueに設定することでJavaScriptからクッキーにアクセスできなくなる
HTTPクッキーともいう
デフォルトはfalse

セッションハイジャック

なんらかの方法でセッションIDを盗聴することでセッションそのものを乗っ取ること
個人情報を盗まれたりなりすましによる不正な操作などの被害に直結する可能性がある
セッション関連のパラメータに適切な値を設定しておくことが大切

ファイルアップロード攻撃

不正なファイルをアップロードすることで任意のスクリプトを実行可能にできてしまう攻撃
HTTP経由でアクセスできるフォルダにファイルをアップロードさせないことで、仮に不正なファイルがアップロードされたとしてもHTTP経由で実行されてしまうことは最低限防げる
ファイルのアップロード時にファイルの種類を制限する

入力値の検証

セキュリティ対策の最初の一歩
入力時に不正な値を最大限ふるいにかけておくことで問題があった場合にもその被害を食い止められる
多重制御がセキュリティ対策の基本
検証の対象は原則リクエスト情報の全て