Chapter 01 안정성
01 민감-데이터의 수명을 제한하라
02 클라이언트에 암호화되지 않은 민감-데이터를 저장하지 말라
03 민감한 가변적 클래스에 수정이 불가능한 래퍼를 제공하라
04 보안에 민감한 메서드들이 검증된 매개변수를 가지고 호출되도록 보장하라
05 마구잡이 파일 업로드를 방지하라
06 출력을 적절하게 인코딩하거나 이스케이핑하라
07 코드 인젝션을 방지하라
08 XPath인젝션을 방지하라
09 LDAP인젝션을 방지하라
10 비신뢰-메서드의 매개변수를 clone(메서드로 복제하지 말라
11 암호키를 Object.equals(로 비교하지 말라
12 안전하지 않거나 약한 암호 알고리즘을 사용하지 말라
13 해시 함수를 이용하여 패스워드를 저장하라
14 SecureRandom에 적절한 시드를 제공하도록 보장하라
15 비신뢰-코드가 오버라이드할 수 있는 메서드에 의존하지 말라
16 과도한 권한 승인을 삼가라
17 특권-코드를 최소화하라
18 비신뢰-코드에게 간소화된 보안검사를 하는 메서드를 노출하지 말라
19 섬세한 보안을 위해 맞춤형 보안 퍼미션을 정의하라
20 보안 관리자를 이용하여 안전한 샌드박스를 생성하라
21 비신뢰-코드가 콜백 메서드의 권한을 오용하지 못하도록 방지하라
Chapter 02 방어적 프로그래밍
22 변수들의 영역범위를 최소화하라
23 @SuppressWarnings주석의 범위를 최소화하라
24 클래스와 멤버들에 대한 접근성을 최소화하라
25 쓰레드-안정성을 문서화하고 적절한 곳에 주석을 사용하라
26 메서드의 결과값에 대해 항상 피드백을 제공하라
27 여러 가지 파일 속성을 이용하여 파일을 식별하라
28 enum에서 부여한 순서번호에 의미를 두지 말라
29 숫자의 확대변환 동작을 주의하라
30 가변형 매개변수의 타입에 대해 컴파일 검사를 시행하라
31 이후의 릴리즈에서 변경될 수 있는 상수에 public final을 사용하지 말라
32 패키지간의 순환적 종속성을 피하라
책 소개
이 책은 이전의 자바용 CERT 오라클 자바 보안 코딩 표준의 뒤를 이어 중요한 자바 시큐어 코딩 가이드라인들을 다룬다. 특히, 신뢰성 있는 자바 시큐어 코딩 가이드라인에 초점을 맞추고 있다. 지난 몇 년간 나의 주목을 끈 것 중의 하나는 신뢰성과 안전성간의 상호작용이다. 암호 및 인증 등 다양한 보안 툴들이 있지만, 대부분의 침투는 서투르게 마무리된 프로그램의 버그나 보안상의 허점을 공략한다. 신뢰성 있는 시스템 구축과 안전한 시스템 구축은 상당부분 일맥상통한다. 즉, 신뢰성 있는 방식은 보안성을 만족시키고 그 반대도 ...
책 소개
이 책은 이전의 자바용 CERT 오라클 자바 보안 코딩 표준의 뒤를 이어 중요한 자바 시큐어 코딩 가이드라인들을 다룬다. 특히, 신뢰성 있는 자바 시큐어 코딩 가이드라인에 초점을 맞추고 있다. 지난 몇 년간 나의 주목을 끈 것 중의 하나는 신뢰성과 안전성간의 상호작용이다. 암호 및 인증 등 다양한 보안 툴들이 있지만, 대부분의 침투는 서투르게 마무리된 프로그램의 버그나 보안상의 허점을 공략한다. 신뢰성 있는 시스템 구축과 안전한 시스템 구축은 상당부분 일맥상통한다. 즉, 신뢰성 있는 방식은 보안성을 만족시키고 그 반대도 마찬가지이다.
이 책에서 강조하듯이, 보안은 하나의 기능이 아니라 주의를 기울이는 자세를 의미한다. 이렇듯 보안은 소프트웨어 공학의 모든 단계에 지속적으로 이루어져야 한다. 이 책은 가이드라인 리스트를 중심으로 구성되어 있으며, 핵심은 가이드라인을 이행하기 위해 필요한 구체적인 내용들이다. 예를 들어, “해시 함수를 이용하여 패스워드를 저장하라”는 매우 기본적이고 명백한 사항이지만, 일부 소프트웨어가 미처 고려하지 못하여 발생한 데이터 유출 사고 뉴스를 심심치 않게 볼 수 있다. 공격이 파고들 수 있는 부분들은 수없이 많으며, 이로 인해 높은 보안성을 이루기란 매우 까다롭다.
이 책은 이러한 목표를 위해 필요한 상세 사항들을 다루는 최고의 안내자이다.
-제임스 고슬링(James A. Go