界: API Abuse
API は、呼び出し元と呼び出し先の間のコントラクトです。最も一般的な API の不正使用の形態は、呼び出し元がこのコントラクトの終わりを守らないことによって発生します。たとえば、プログラムが chroot() を呼び出した後に chdir() を呼び出すのに失敗すると、アクティブなルート ディレクトリを安全に変更する方法を指定したコントラクトに違反することになります。ライブラリの悪用のもう 1 つの良い例は、呼び出し先が信頼できる DNS 情報を呼び出し元に返すことを期待することです。この場合、呼び出し元は、呼び出し先の API の動作 (戻り値が認証目的に使用できること) についてある種の仮定をすることで、呼び出し先の API を悪用します。また、相手側から、呼び出し元と呼び出し先のコントラクトを違反することもできます。例えば、コーダーが SecureRandom をサブクラス化し、ランダムではない値を返した場合、コントラクトに違反することになります。
Code Correctness: Class Does Not Implement Equivalence Method
Abstract
Equals()
が Equals()
を実装しないオブジェクトでコールされています。Explanation
開発者がオブジェクトを比較する場合、通常はオブジェクトのプロパティを比較します。しかし、明示的に
例 1:
Equals()
を実装していないクラス (あるいは任意のスーパークラス/インターフェイス) で Equals()
をコールすると、System.Object
から継承した Equals()
メソッドがコールされる結果となります。Object.Equals()
はオブジェクトのメンバー フィールドやその他のプロパティを比較する代わりに、2 つのオブジェクト インスタンスを比較してその 2 つが同一のものであるかを確認します。Object.Equals()
の正規の利用法も存在しますが、通常はコードにバグがあることを示しています。例 1:
public class AccountGroup
{
private int gid;
public int Gid
{
get { return gid; }
set { gid = value; }
}
}
...
public class CompareGroup
{
public bool compareGroups(AccountGroup group1, AccountGroup group2)
{
return group1.Equals(group2); //Equals() is not implemented in AccountGroup
}
}
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.dotnet.code_correctness_class_does_not_implement_equals
Abstract
equals()
メソッドが、equals()
を実装しないオブジェクトでコールされています。Explanation
開発者がオブジェクトを比較する場合、通常はオブジェクトのプロパティを比較します。しかし、明示的に
例 1:
equals()
を実装していないクラス (あるいは任意のスーパークラス/インターフェイス) で equals()
をコールすると、java.lang.Object
から継承した equals()
メソッドがコールされる結果となります。Object.equals()
はオブジェクトのメンバーフィールドやその他のプロパティを比較する代わりに、2 つのオブジェクトインスタンスを比較してその 2 つが同一のものであるかを確認します。Object.equals()
の正規の利用法も存在しますが、通常はコードにバグがあることを示しています。例 1:
public class AccountGroup
{
private int gid;
public int getGid()
{
return gid;
}
public void setGid(int newGid)
{
gid = newGid;
}
}
...
public class CompareGroup
{
public boolean compareGroups(AccountGroup group1, AccountGroup group2)
{
return group1.equals(group2); //equals() is not implemented in AccountGroup
}
}
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.code_correctness_class_does_not_implement_equals