캡슐화는 강력한 경계를 그리는 것입니다. 웹 브라우저에서는 사용자의 모바일 코드가 다른 모바일 코드에 의해 오용되지 않도록 하는 것을 의미합니다. 서버에서는 검증된 데이터와 검증되지 않은 데이터, 한 사용자의 데이터와 다른 사용자의 데이터, 데이터 사용자가 볼 수 있는 데이터와 볼 수 없는 데이터 간의 차별화를 의미할 수 있습니다.
public
접근 메서드에서 private
배열 변수를 반환하여 이식 가능한 코드의 보안 코딩 규칙을 위반합니다. public
접근 메서드에서 private
배열 변수를 반환하면 호출 코드가 배열의 내용을 수정할 수 있기 때문에, 사실상 배열에 public
접근을 부여하게 되어 배열을 private
로 선언한 프로그래머의 의도와는 반대가 됩니다. public
접근 메서드에서 private
배열 변수를 반환하는 오류를 범합니다.
public final class urlTool extends Applet {
private URL[] urls;
public URL[] getURLs() {
return urls;
}
...
}
public class CustomerServiceApplet extends JApplet
{
public void paint(Graphics g)
{
...
conn = DriverManager.getConnection ("jdbc:mysql://db.example.com/customerDB", "csr", "p4ssw0rd");
...
package
수준 접근 권한을 가진 피어 클래스로 변환해야 합니다. 더 나쁜 경우, inner class가 엔클로우징 클래스(enclosing class)의 private
필드를 접근할 수 있기 때문에, inner class가 바이트코드의 피어 클래스가 되면 컴파일러는 inner class가 접근하는 private
필드를 protected
필드로 변환합니다.
public final class urlTool extends Applet {
private final class urlHelper {
...
}
...
}
finalize()
메서드를 public
으로 선언하여 이식 가능한 코드의 보안 코딩 규칙을 위반합니다.finalize()
구현 내에서 super.finalize()
를 호출하는 것만 제외하고 명시적으로 finalize를 호출할 수 없습니다. 이식 가능한 코드인 경우, 그렇지 않아도 오류가 발생하기 쉬운 수동 가비지 수집(garbage collection) 방법을 사용하면 공격자가 악의적으로 finalize()
메서드 중 하나를 호출하는 경우, 메서드가 public
접근으로 선언되어 있기 때문에 보안에 위협이 됩니다. finalize()
를 설계 의도대로 사용한다면 protected
접근 외에 다른 접근으로 finalize()
를 선언할 이유가 없습니다.public finalize()
method를 선언하는 오류를 범합니다.
public final class urlTool extends Applet {
public void finalize() {
...
}
...
}
public
, final
과 static
으로 선언하여 이식 가능한 코드의 보안 코딩 규칙을 위반합니다.public
, final
및 static
으로 선언된 배열은 버그가 됩니다. 배열이 변경 가능한 개체이기 때문에, final
제약 조건에 따라 배열 개체는 한 번만 지정해야 하지만 배열 요소의 값에 대해서는 아무런 보장이 없습니다. 배열이 public이기 때문에 악성 프로그램이 배열에 저장된 값을 변경할 수 있습니다. 대부분의 경우 배열은 private
로 해야 합니다. public
, final
및 static
으로 잘못 선언합니다.
public final class urlTool extends Applet {
public final static URL[] urls;
...
}
public
으로만 선언하고 final
로는 선언하지 않아, 이식 가능한 코드의 보안 코딩 규칙을 위반합니다. public
멤버 변수를 final
로 선언하여 공격자가 Applet의 내부 상태에 대한 무단 접근을 확보하거나 조작하지 못하게 해야 합니다.public
으로만 선언하고 final
로 선언하지 않는 오류를 범합니다.
public final class urlTool extends Applet {
public URL url;
...
}