料AboutJavaScriptを有効にして、ご利用ください。プログラムでは、リフレクション(reflection)を使ってプログラム自身の解析や変更を行うことができる。リフレクションAPIには、通常アクセスできないはずのフィールドにアクセスするためのメソッドが含まれている。持つすべてのフィールドの名前とその値を出力する。field.get(someObject));}フィールドに値を設定したいときは、以下のように行う。field.getType()));デフォルトのセキュリティマネージャを使っている場合、通常アクセスできないフィールドは、リフレクションの機能を使ってもアクセスできるようにはならない。許可すると、デフォルトの動作は抑制される。メンバが他のクラスのオブジェクトからアクセスされないように保護する。java.lang.reflectパッケージのAPIを使用する)、リフレクションでは同様の制限が課される。メンバにアクセスすることのできない他のクラスは、通常、リフレクションを使ってもそれらのメンバにはアクセスできない。メンバにリフレクションを使ってアクセスすることを可能にする。したがって、プログラマの不注意により、信頼できない呼出し元に、権限昇格につながる攻撃を許してしまう危険がある。言語のアクセスチェックを上書きするよう指令するために使用されるので、標準的な(そしてより制限された)セキュリティマネージャのチェックが行われる。したがってこれらのメソッドには、このルールで説明しているような脆弱性は存在しない。これらのメソッドを十分注意して使うべきであることに変わりはない。メソッドは言語上のアクセスチェックしか行われないので、脆弱である。リフレクションの使用は、セキュリティ分析をいたずらに複雑にし、容易に脆弱性を作り込んでしまう。使わないようにすべきである。必要な場合には、特別な注意を払って使うこと。リフレクションの機能を使ってクラス、メソッド、フィールドへのアクセスを提供するのは、リフレクションを使わなくともそれらへのアクセスが可能な場合のみにしなければならない。メソッドを使ってアクセスできるフィールドでない限り、リフレクションを使ったアクセスを提供してはならない。メソッドをオーバーライドあるいは隠蔽するときにアクセス範囲を広げない」に類似しているが、継承ではなくリフレクションの使用について注意を促すものである。値を変更することができる。メソッドのリフレクション機能を使うことで、これらのフィールドの値を変更できてしまう。メソッドに任意のフィールド名を渡せる場合、以下のような危険がある。無効なフィールド名やアクセスできないフィールド名を渡されたときに例外がスローされることで、フィールド名に関する情報が漏えいする。センシティブな情報を例外によって外部に漏えいしない」を参照。センシティブな情報を例外によって外部に漏えいしない」には適合している。メソッドを通じてアクセス可能になる。権限昇格につながるこのような問題を、コードレビューで発見するのは難しい。どのフィールドがアクセスされるかは、攻撃者が用いるコードが指定する文字列で決まり、レビューしているソースコードからは分からないからだ。アクセスチェックを通過する。適切にログをとるか例外を投げる。宣言し、悪意あるコードが直接呼び出せないようにしなければならない。宣言されたフィールドへのアクセスも可能になってしまうことに注意。アクションを許可しないこと。(Nonreflection)あるクラスでフィールドへのアクセスにリフレクションを使わなければならない場合、そのようなアクセスはリフレクションを使わなくても行えるようにしておかなければならない。メソッドを提供し、リフレクションを使わずにフィールドの値を0に設定できるようにしている。メソッドが他のルールやセキュリティポリシーに適合しているならば、リフレクションの使用もまたこのルールに適合していることになる。パッケージの外部のコードにはインスタンスの生成を許さないことをプログラマは意図していた。クラスでは、コンストラクタをパッケージプライベートにしている。渡すことで、外部のコードからパッケージプライベートなコンストラクタを呼び出せないようにするはずのアクセスチェック機能を回避できる。メソッドは、以下のいずれかの場合にセキュリティ例外をスローする。クラスへのアクセスを許可する。クラスローダを比較するだけでは不十分であることが多い。すべてのアプレットは同一のクラスローダを共有している。そのため、悪質なアプレットはセキュリティチェックを通過してしまう。クラスのインスタンスを作られることを防いでいる。コンストラクタを呼び出すことができる。コンストラクタを持っているかどうか調べている。コンストラクタを持つならば、セキュリティ上の問題はない。あるならば、それはすでに悪意あるコードにもアクセス可能になっているからである。パッケージで定義されているクラスやそのメンバにアクセスするための十分なパーミッションを持っていることを確認する。呼出しを許可するリフレクションのパーミッションを持っていなければならないということである。コンストラクタを持っているかを調べている。コンストラクタを持っている場合だけである。このメソッドは、インスタンス化するクラスの名前と一緒に、クラスローダも引数として受け取る。前の適合コードとは異なり、このやり方ではリフレクションのパーミッションを必要としない。誤用すると、データのカプセル化が無効になったり、センシティブな情報が漏えいしたり、権限昇格が行なわれる危険がある。AccessibleObject翻訳元これは以下のページを翻訳したものです。有このページは役に立ちましたか?javascriptを有効にすると、ご回答いただけます。その他のご意見はPCサイトにて入力願います。