자바 시큐어코딩 예제

이 문서는 Java SE 11에 포함된 몇 가지 새로운 기능을 다루도록 업데이트되었습니다. 그러나 이러한 지침은 이전 버전의 Java용으로 작성된 소프트웨어에도 적용됩니다. Java 패키지는 관련 Java 클래스 및 인터페이스의 그룹으로 구성됩니다. 게시된 API의 일부로 지정된 경우 클래스 또는 인터페이스 공용을 선언하고 그렇지 않으면 패키지-private을 선언합니다. 마찬가지로 API의 일부인 경우 클래스 멤버 및 생성자(중첩된 클래스, 메서드 또는 필드)를 공개하거나 적절하게 보호합니다. 그렇지 않으면 구현이 노출되지 않도록 개인 또는 패키지 개인으로 선언합니다. 인터페이스의 멤버는 암시적으로 공용입니다. 최선의 노력에도 불구하고 잘 검토된 코드에서도 모든 코딩 결함이 제거되는 것은 아닙니다. 그러나 코드가 감소된 권한으로 작동하는 경우 결함을 악용하는 것이 방해받을 수 있습니다. 이 것의 가장 극단적인 형태는 최소 권한의 원칙으로 알려져 있다. Java 보안 메커니즘을 사용하면 정책 파일을 통해 권한을 제한하고 java.security.AccessController.doPrivileged 메커니즘을 사용하여 동적으로 구현할 수 있습니다(섹션 9 참조). 다른 로더에서 로드한 클래스는 동일한 패키지 이름을 가지고 있더라도 서로에 대한 패키지 전용 액세스 권한을 갖지 않습니다.

동일한 클래스 로더가 로드한 동일한 패키지의 클래스는 동일한 코드 서명 인증서를 공유하거나 인증서가 전혀 없어야 합니다. Java 가상 컴퓨터 클래스 로더에서는 패키지를 정의해야 합니다. 물론 패키지는 jar 파일 매니페스트에 봉인된 것으로 표시하는 것이 좋습니다. 신뢰할 수 없는 데이터는 HTML 또는 XML 출력에 포함되기 전에 올바르게 소독되어야 합니다. 데이터를 제대로 소독하지 않으면 XSS(교차 사이트 스크립팅) 및 XML 주입 취약점과 같은 다양한 보안 문제가 발생할 수 있습니다. 자바 서버 페이지(JSP)를 사용할 때는 특히 주의해야 합니다. Java SE 8에서 java.lang.Math 클래스에는 결과가 지정된 형식을 오버플로하는 경우 산술예외를 throw하는 다양한 작업 (addExact, multiplyExact, decrementExact 등)에 대한 메서드도 포함되어 있습니다. 네이티브 코드는 Java 예외를 직접 지원하지 않으며 Java 코드에서 throw된 예외는 네이티브 코드의 제어 흐름에 영향을 주지 않습니다. 따라서 네이티브 코드는 특히 예외를 throw할 수 있는 Java 메서드를 호출할 때 작업 후 예외를 명시적으로 확인해야 합니다. 예외는 비동기적으로 발생할 수 있으므로 특히 Java 코드로 다시 호출할 때 긴 네이티브 루프에서 예외를 확인해야 합니다. 악성 코드가 네이티브 개체에서 작업을 잘못 사용하여 메모리 의 일부를 덮어쓰지 않도록 하려면 상태를 유지 관리하지 않고 네이티브 작업을 설계해야 합니다. 상태 비수기 상호 작용이 항상 가능하지않을 수도 있습니다.

조작을 방지하기 위해 Java 측에 보관된 기본 메모리 주소는 개인 필드에 보관하고 Java 측에서 읽기 전용으로 처리해야 합니다. 또한 기본 메모리에 대한 참조는 신뢰할 수 없는 코드에 액세스할 수 없도록 해서는 안 됩니다. 인증 항목은 스프링 보안에만 해당됩니다.