セキュアコーディング
■ アメリカのCERTが定めるセキュアコーディングプラクティスのうち、重要な原則。
- 入力を検証する。
- コンパイラからの警告に注意を払う。
- セキュリティポリシーを実装するように設計する。
- シンプルにする。
- 拒否をデフォルトにする。
- 最小権限の原則に従う。
- ほかのシステムに送信するデータを無害化する。
- 多重防御を実践する。
- 効果的な品質保証テクニックを利用する。
- セキュアコーディング標準を採用する。
■ Unicode正規化を実現するためのメソッド
java.text.Normalizerクラスのnormalizeメソッド
■ 整数オーバーフロー攻撃に対応する対策
- 事前条件テストを行う。
- アップキャストを行う。
- BigIntegerクラスを使う。
■ 機密情報の扱いに関する説明
- 例外が発生したとき、どのような例外が発生したのかをユーザーに見せてはいけない。
- 機密情報を扱ったインスタンスは、ガベージコレクションを待たずに、速やかに削除しなければならない。
- コアダンプは、できるだけ早期に削除すべきである。
■ 機密情報の改ざんを防止する方法
- セキュリティマネージャを使用。
- 機密情報は、変更不可能なオブジェクトまたは不変オブジェクトに格納する。
■ 機密情報を保護する内容
- 機密情報を明確に識別する。
- 機密情報を格納する前に入力を検証する。
- 機密情報を保持するオブジェクトへのアクセスを制限する。
■ Javaアプリケーションの開発において、Dos攻撃対策
- ファイルを読み込む際には、ファイルのサイズを調べてから読み込むようにすべきである。
- ファイルへの接続は、try-with-resources文を使ったリソースの自動解放機能を利用するべき。
- メモリに過剰なデータを読み込まないよう、プログラムで予防的な制限をかけるべきである。
■ セキュアなアプリケーションを開発の正しい説明
- セキュリティマネージャを有効にするには、javaコマンドのオプションに「-Djava.security.manager」を追加する
■ 特定のjarファイルだけに、セキュリティ上の特権を与えるために、セキュリティポリシーファイル正しい記述
// codeBaseを使用する
grant codeBase "file:/Users/shiga/workspace/chap12/lib.jar" {
permission java.io.FilePermission "/", "read";
}
■ 不変オブジェクトを定義する際に、セキュリティ面で適正な方法
- フィールドの値を変更するようなsetterメソッドは提供しない。
- フィールドの値を変更するのであれば、ディープコピーしたインスタンスを生成して、その参照を戻す。
- フィールドはfinalで宣言し、コンストラクタで初期値を設定したら変更できないようにする。
- 継承ができないように、クラス宣言をfinalで修飾する。
- インスタンスを生成するための専用のビルダーを用意する。
■ 可変オブジェクトを安全に扱うための指針
- getterメソッドでは、フィールドのオブジェクトをコピーを作って、戻す。
- コピーコンストラクタを用意する。
- 可変オブジェクトを受け取るコンストラクタでは、受け取った参照をそのまま利用しない。
■ セキュアコーディングを実践するための方法
- パッケージ内で公開するインタフェースを限定する。
- モジュールを使って公開パッケージを限定する。
- クラスを宣言するときにはfinalで修飾する。
■ SQLインジェクションを防ぐために使用するインタフェース
- java.sql.PreparedStatement
■ 機密情報を扱うインスタンスをシリアライズするときに実施すべき対策
- フィールドをtransientで修飾する。
- serialPersistentFieldsフィールドを定義して、シリアライズされるべきフィールドを指定する。
■ シリアライズ・プロキシ・パターンの説明
- シリアライズするときにはwriteReplaceメソッドがデシリアライズするときにはreadResolveメソッドが利用される。セットで定義する。
■ DoS攻撃の説明
- DoS攻撃(Denial of Service attack)とは、サーバーやネットワークに大量のデータやアクセスを送信して、正常なサービスの提供を妨害するサイバー攻撃。
- DoS攻撃防ぐには、try-with-resourcesを使用して、自動的にリソースが閉じるようにする。