Security Code Guidelines
이 룰셋은 Sun이 배포한 보안 가이드라인을 확인하는 룰들을 포함한다.
MethodReturnsInternalArray
클래스 내부의 배열을 직접적으로 반환하면 사용자는 외부에서 임의로 내부 배열을 수정할 수 있다. 이는 매우 치명적인 오류를 발생시킬 수 있는 원인이 된다. 안전한 방법은 내부의 배열을 복사하여 전달하는 방법이다.
public class SecureSystem { UserData [] ud; public UserData [] getUserData() { // 절대로 내부의 배열을 직접적으로 반환하지 말자. // System.arraycopy등을 이용하여 배열을 복사하여 전달하자. return ud; } }
ArrayIsStoredDirectly
생성자와 메소드는 전달받은 배열을 복제 객체를 만들거나 배열의 복사본을 저장해야한다. 이는 외부 사용자가 임의로 내부의 기능(functionality)을 변경하는 것을 막는다.
public class Foo { private String [] x; public void foo (String [] param) { //배열을 아래와 같이 직접적으로 저장하지말자! //배열을 복사해서 저장하도록하자. this.x=param; } }
해당 URL: http://pmd.sourceforge.net/pmd-4.2.6/rules/sunsecure.html