HOME > 상세정보

상세정보

버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍

버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍 (2회 대출)

자료유형
단행본
개인저자
Long, F. W (Frederick W.), 1947-, 저 Mohindra, Dhruv, 저 Seacord, Robery C, 저 Sutherland, Dean, 저 Svoboda, David, 저 강권학, 역
서명 / 저자사항
버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍 / 프레드 롱 [외] 지음 ; 강권학 옮김
발행사항
서울 :   한빛미디어,   2012  
형태사항
780 p. : 삽화 ; 24 cm
원표제
(The) CERT Oracle secure coding standard for Java
ISBN
9788979149500
일반주기
공저자: 드루브 모힌드라, 로버트 C. 시코드, 딘 서덜랜드, 데이비드 수오보다  
당신의 코딩 습관은 안전하지 않다  
서지주기
참고문헌(p. 730-749)과 색인수록
일반주제명
Java (Computer program language) Computer security Computer programming -- Standards
000 01606camcc2200481 c 4500
001 000045724996
005 20121119161045
007 ta
008 120818s2012 ulka b 001 kor
020 ▼a 9788979149500 ▼g 93560
035 ▼a (KERIS)REW000000157932
040 ▼d 244002
041 1 ▼a kor ▼h eng
082 0 4 ▼a 005.8 ▼2 23
085 ▼a 005.8 ▼2 DDCK
090 ▼a 005.8 ▼b 2012z14
245 0 0 ▼a 버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍 / ▼d 프레드 롱 [외] 지음 ; ▼e 강권학 옮김
246 1 9 ▼a (The) CERT Oracle secure coding standard for Java
246 3 ▼a CERT 자바 프로그래밍
246 3 ▼a 자바 프로그래밍
260 ▼a 서울 : ▼b 한빛미디어, ▼c 2012
300 ▼a 780 p. : ▼b 삽화 ; ▼c 24 cm
500 ▼a 공저자: 드루브 모힌드라, 로버트 C. 시코드, 딘 서덜랜드, 데이비드 수오보다
500 ▼a 당신의 코딩 습관은 안전하지 않다
504 ▼a 참고문헌(p. 730-749)과 색인수록
630 0 0 ▼a Oracle (Computer file)
650 0 ▼a Java (Computer program language)
650 0 ▼a Computer security
650 0 ▼a Computer programming ▼x Standards
700 1 ▼a Long, F. W ▼q (Frederick W.), ▼d 1947-, ▼e
700 1 ▼a Mohindra, Dhruv, ▼e
700 1 ▼a Seacord, Robery C, ▼e
700 1 ▼a Sutherland, Dean, ▼e
700 1 ▼a Svoboda, David, ▼e
700 1 ▼a 강권학, ▼e
900 1 0 ▼a 롱, 프레드, ▼e
900 1 0 ▼a 모힌드라, 드루브, ▼e
900 1 0 ▼a 시코드, 로버트 C, ▼e
900 1 0 ▼a 서덜랜드, 딘, ▼e
900 1 0 ▼a 수오보다, 데이비드, ▼e
940 ▼a CERT Java programming
940 ▼a Java programming

소장정보

No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 세종학술정보원/과학기술실/ 청구기호 005.8 2012z14 등록번호 151312328 도서상태 대출가능 반납예정일 예약 서비스 C

컨텐츠정보

책소개

자바의 핵심 영역별로 구체적인 규칙을 자세하게 설명한다. 각 영역에서 부적합 예제와 문제를 올바르게 해결한 적합 예제를 보여준다. 각 규칙은 부적합 코드가 일으키는 심각성, 악용할 수 있는 취약점을 발생시킬 수 있는 가능성을 설명한다. 이 책에서 제시하는 지침을 적용하면 취약점을 유발하는, 안전하지 못한 코딩 습관을 제거해 공격에 더 잘 견디는 튼튼한 고품질 시스템을 만들 수 있다.

코딩 표준에서는 자바 프로그래밍 언어와 라이브러리를 포함한 자바 SE 6 플랫폼에 대한 안전한 코딩 규칙을 정의하고, 자바 SE 7 플랫폼에 새로 추가된 기능에 대해서도 설명한다. javax 패키지가 제공하는 표준 확장 API와 관련된 보안 문제, lang, util, 컬렉션, 동시성 유틸리티, 로그, 리플렉션, 정규 표현식, 압축, 파일 입출력, JMX, JNI, 직렬화, JAXP 라이브러리 등에 적용할 수 있는 보안 문제까지 포괄적으로 설명한다.

일반적인 코딩 패턴에서 나타나는 보안 취약점을 사전에 제거하는 방어적 프로그래밍
컴퓨터 비상 대응팀(CERT)은 다양한 소프트웨어에서 취약점을 유발하는 안전하지 못한 코딩 습관이 반복되는 것을 보았다. 이 책에서 제시하는 지침을 적용하면 취약점을 유발하는, 안전하지 못한 코딩 습관을 제거해 공격에 더 잘 견디는 튼튼한 고품질 시스템을 만들 수 있다.

이 책에서 제시하는 17개 장을 통해 자바의 핵심 영역별로 구체적인 규칙을 자세하게 설명한다. 각 영역에서 부적합 예제와 문제를 올바르게 해결한 적합 예제를 보여준다. 각 규칙은 부적합 코드가 일으키는 심각성, 악용할 수 있는 취약점을 발생시킬 수 있는 가능성을 설명한다.

코딩 표준에서는 자바 프로그래밍 언어와 라이브러리를 포함한 자바 SE 6 플랫폼에 대한 안전한 코딩 규칙을 정의하고, 자바 SE 7 플랫폼에 새로 추가된 기능에 대해서도 설명한다. javax 패키지가 제공하는 표준 확장 API와 관련된 보안 문제, lang, util, 컬렉션, 동시성 유틸리티, 로그, 리플렉션, 정규 표현식, 압축, 파일 입출력, JMX, JNI, 직렬화, JAXP 라이브러리 등에 적용할 수 있는 보안 문제까지 포괄적으로 설명한다.

행정안전부, SW 개발단계부터 보안취약점 제거(시큐어 코딩) 의무화
2012년 12월부터 행정기관 등에서 추진하는 개발비 40억 원 이상의 정보화 사업에 소프트웨어 개발보안 적용을 의무화하고 단계적으로 의무 대상을 확대하여 2015년에는 감리대상 전 정보화사업에 소프트웨어 개발보안을 적용한다. 보안 코딩은 일반적인 코딩 패턴에서 나타나는 취약점을 사전에 예방하는 습관일 뿐 아니라 현업에서의 요구사항이 되고 있다.

“자바 세계에서는 보안을 부가 기능으로 생각하지 않습니다. 언제나 보안을 고려해야 합니다. 보안을 염두에 두지 않는 개발자가 결국 문제를 일으킵니다. 그러나 보안 기능이 준비되어 있다고 해서 소프트웨어가 저절로 안전해지는 것은 아닙니다. 『버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍』은 수년간 발전해온 표준적인 관습을 요약한 해설서입니다. 그렇다고 해서 이론적인 연구 논문이나 제품 안내 자료도 아닙니다. 이 책은 중요한, 개발에 필수적인, 실전에서 검증된, 기업 규모의 프로젝트에 적용할 수 있습니다.”
- 제임스 고슬링(James A. Gosling), 자바 프로그래밍 언어의 아버지


정보제공 : Aladin

저자소개

프레드 롱(지은이)

영국 Aberystwyth대학 컴퓨터학과의 교수이다. 정형 기법(Formal Method)과 자바, C++, C프로그래밍 언어와 프로그래밍과 관련된 보안 이슈를 강의한다. 영국 컴퓨터 학회 웨일즈 중부지역 의장이기도 하다. 1992년부터 소프트웨어 공학 연구소 객원 연구원을 역임하고 있다. 최근에는 자바 취약점을 연구하고 있다.

드루브 모힌드라(지은이)

인도 Persistent Systems사의 CTO오피스 부서인 보안 실전 그룹(security practice group)의 기술책임자이다. 클라우드, 협업, 뱅킹과 금융, 텔레커뮤니케이션, 기업, 모빌리티, 생활 과학, 건강 관리와 같은 다양한 기술들에 대해 보안 컨설팅 솔루션을 제공하고 있다. 그는 Fortune 500개 회사, 중소기업, 그리고 신규업체의 고위 관리직과 개발팀을 대상으로 정보보안 모범사례 및 보안요소가 내재된 소프트웨어 개발과정에 대한 컨설팅을 하고 있다.

딘 F. 서덜랜드(지은이)

CERT의 선임 소프트웨어 보안 엔지니어이다. 2008년도에 카네기 멜론 대학교에서 소프트웨어 공학 박사 학위를 받았으며, 학교에 돌아오기 전 14년 동안 Tartan사에서 소프트웨어 엔지니어로 근무했다. 이 기간 중 마지막 6년 동안 기술 참모 선임 참여자였으며, 컴파일러 후반부 기술 팀장이었다. 회사 R&D 그룹의 핵심 멤버로 Tartan의 신규 소프트웨어 개발 프로세스를 설계하고 집행하는 것을 지휘하고 R&D 프로젝트를 이끌었고, 12명으로 구성된 컴파일러 후반부 개발팀의 기술과 프로젝트 팀장이었다.

데이비드 수오보다(지은이)

CERT의 소프트웨어 보안 엔지니어이다. 그는 1991년부터 카네기 멜론 대학교의 다양한 소프트웨어 개발 프로젝트의 주요 개발자였다. 계층 구조 칩 모델링, 소셜 조직 시뮬레이션에서 자동 기계 번역에 이르기까지 다양한 프로젝트에 참여해 개발했으며, 1996년에 개발한 KANTOO 자동 번역기는 현재까지 캐터필라에서 생산 과정에 사용한다. 그는 자바 2부터 시작해 13년이 넘게 자바로 개발해왔으며, 톰캣 서블릿과 이클립스 플러그인 등을 개발해왔다. 그는 C 언어 표준화 JTC1/SC22/WG14 그룹과 C++ 언어 표준화 JTC1/SC22/WG21 그룹 등 ISO의 여러 표준화 그룹에 활발히 참여하고 있다.

로버트 C. 시코드(지은이)

펜실베니아 피츠버그에 있는 카네기 멜론 소프트웨어 공학 연구소 CERT부서의 보안코딩 기술관리자이며, 카네기 멜론 대학교의 컴퓨터과학대학 및 정보 네트워크 연구소의 교수이다. 소프트웨어 보안, 컴포넌트-기반 소프트웨어 공학, 웹-기반 시스템 설계, 시스템 현대화, 컴포넌트 저장소와 검색엔진 그리고 사용자 인터페이스와 개발에 관련된 60편 이상의 논문을 발표했다. 『버그 없는 안전한 소프트웨어를 위한 CERT C 프로그래밍』(에이콘출판, 2010)의 저자이며, 『Building Systems from Commercial Components』(애디슨웨슬리, 2002), 『Modernizing Legacy Systems』(애디슨웨슬리, 2003), 『The CERT Oracle Secure Coding Standard for Java』(애디슨웨슬리, 2011)의 공동 저자다. 소프트웨어 보안, 컴포넌트 기반 소프트웨어 기술, 웹 기반 시스템 설계, 구 시스템 현대화, 컴포넌트 저장소와 검색 엔진, 사용자 인터페이스 설계와 개발에 대해 40편 이상의 논문을 발표했다. 2005년 이래로 민간 기업, 학계, 정부에 C와 C++로 시큐어 코드를 작성하는 방법을 가르쳤다. 1982년에 IBM에서 직업적으로 프로그래밍을 시작했고, 통신과 운영체제 소프트웨어, 프로세서 개발, 소프트웨어 엔지니어링 분야에서 근무했다. 또한 X 컨소시엄에서 일했는데, 공통 데스크톱 환경과 X 윈도우 시스템에 대한 코드를 개발하고 유지 보수했다. C 프로그래밍 언어에 대한 ISO/IEC JTC1/SC22/WG14 국제 표준화 작업 그룹에서 카네기 멜론 대학 CMU을 대표했다.

강권학(옮긴이)

중앙대학교 컴퓨터공학과에서 학사와 석사학위를 받았다. 국방과학연구소, 퓨쳐시스템, 안철수연구소에서 13년간 개발자, 보안전문가, 프로젝트 관리자로 근무하였으며, 2009년 4월 호주 멜버른에 iGonagi Pty. Ltd.를 설립하고 아이폰 애플리케이션을 개발하고 있다. 번역서로는 『게임 디자인 레벨업 가이드(공역)』, 『Head First Python』, 『안드로이드 시큐리티 인터널』, 『Head First JavaScript Programming』, 『비즈니스를 위한 데이터 과학』, 『C++ AMP』, 『Head First C』, 『iPhone 3D Programming』, 『iPhone Programming(공역)』, 『Head First iPhone Development』(이상 한빛미디어) 등이 있다.

정보제공 : Aladin

목차

목차 
지은이 소개 = 4
옮긴이 서문 = 6
감사의 글 = 8
추천사 = 10
머리말 = 11
CHAPTER 01 개요 
 잘못된 신뢰 = 33
 삽입 공격 = 34
 비밀 데이터 유출 = 35
 접근 권한 유출 = 38
 서비스 거부 = 39
 직렬화 = 42
 동시성, 가시성, 메모리 = 43
 최소 권한 원칙 = 51
 보안 관리자 = 52
 클래스 로더 = 54
 결론 = 55
CHAPTER 02 입력 검증 및 데이터 새니타이즈(IDS) 
 규칙 = 56
 위험 평가 요약 = 57
 IDS00-J. 신뢰 경계를 넘어온 데이터는 새니타이즈한다 = 57 
 IDS01-J. 문자열을 검증하기 전에 정규화한다 = 68
 IDS02-J. 경로 이름을 검증하기 전에 규범화한다 = 71
 IDS03-J. 새니타이즈하지 않은 사용자 입력은 로그에 남기지 않는다 = 76
 IDS04-J. ZipInputStream에 전달된 파일 크기를 제한한다 = 78
 IDS05-J. 파일과 경로 이름에 ASCII 문자의 일부만 사용한다 = 81
 IDS06-J. 포맷 문자열에 사용자 입력을 포함하지 않는다 = 83
 IDS07-J. 신뢰하지 않고 새니타이즈하지 않은 데이터를 Runtimeexec() 메서드에 전달하지 않는다 = 85
 IDS08-J. regex에 전달할 신뢰하지 않는 데이터를 새니타이즈한다 = 90
 IDS09-J. 로케일을 설정하기 전에는 로케일에 의존하는 데이터에 로케일에 의존하는 메서드를 사용하지 않는다 = 95
 IDS10-J. 두 데이터 구조 간에 문자를 분할하지 않는다 = 96
 IDS11-J. 검증하기 전에 비문자 코드를 제거한다 = 102
 IDS12-J. 인코딩 변경할 때 문자열 데이터를 무손실 변환한다 = 104
 IDS13-J. 파일이나 네트워크에 입출력할 때 양단에 호환되는 인코딩을 사용한다 = 107
CHAPTER 03 선언과 초기화(DCL) 
 규칙 = 110
 위험 평가 요약 = 110
 DCL00-J. 클래스를 초기화할 때 순환을 예방한다 = 111
 DCL01-J. 자바 표준 라이브러리의 식별자를 재사용하지 않는다 = 114
 DCL02-J. 향상된 for 문의 모든 루프 변수는 final로 선언한다 = 117
CHAPTER 04 표현식(EXP) 
 규칙 = 120 
 위험 평가 요약 = 120
 EXP00-J. 메서드가 반환한 값을 무시하지 않는다 = 121
 EXP01-J. 널 포인터를 역참조하지 않는다 = 123
 EXP02-J. 배열 내용을 비교하려면 인자를 두 개 받는 Arraysequals() 메서드를 사용한다 = 125
 EXP03-J. 박싱된 기본형을 비교할 때 동등 비교 연산자를 사용하지 않는다 = 127
 EXP04-J. 오토박싱된 기본형의 값이 의도한 형인지 확인한다 = 133
 EXP05-J. 식 하나 안에서 동일 변수에 두 번 이상 쓰지 않는다 = 135
 EXP06-J. assert 문 안에 부작용이 있는 표현을 사용하지 않는다 = 138
CHAPTER 05 수치형과 연산 (NUM) 
 규칙 = 140
 위험 평가 요약 = 141
 NUM00-J. 정수 오버플로우를 탐지하거나 예방한다 = 141
 NUM01-J. 동일 데이터에 비트 연산과 수리 연산을 수행하지 않는다 = 149
 NUM02-J. 나눗셈과 모듈로 연산할 때 0으로 나누지 않게 보장한다 = 154
 NUM03-J. unsigned 형을 저장하는 정수형 변수는 가능한 모든 값을 표현할 수 있어야 한다 = 156
 NUM04-J. 정확히 계산해야 할 때는 부동소수점형을 사용하지 않는다 = 157
 NUM05-J. 비정규화된 부동소수점을 사용하지 않는다 = 160
 NUM06-J. 플랫폼 간 부동소수점 연산의 결과를 동일하게 하려면 strictfp 지시자를 사용한다 = 163
 NUM07-J. NaN과 값을 비교하지 않는다 = 167
 NUM08-J. 부동소수점 입력 시 예외적인 값을 확인한다 = 169 
 NUM09-J. 루프 카운터로 부동소수점을 사용하지 않는다 = 172
 NUM10-J. 부동소수점 상수를 사용해 BigDecimal 객체를 만들지 않는다 = 174
 NUM11-J. 부동소수점을 나타내는 문자열을 비교하거나 검사하지 않는다 = 175
 NUM12-J. 수치형 값을 더 작은 형으로 변환할 때 데이터가 손실되거나 잘못 변환되지 않게 확인한다 = 176
 NUM13-J. 기본 정수형을 부동소수점형으로 변환할 때 정밀도 손실을 피한다 = 182
CHAPTER 06 객체 지향(OBJ) 
 규칙 = 186
 위험 평가 요약 = 187
 OBJ00-J. 신뢰하는 하위 클래스만 불변 성질을 가진 클래스나 메서드를 상속할 수 있게 한다 = 187
 OBJ01-J. 데이터 멤버는 private로 선언하고 접근 메서드를 제공한다 = 195
 OBJ02-J. 상위 클래스를 수정할 때는 하위 클래스가 의존하는 불변 성질을 유지한다 = 198
 OBJ03-J. 신규 코드에서 제네릭 클래스와 비제네릭 클래스를 함께 사용하지 않는다 = 206
 OBJ04-J. 신뢰하지 않는 코드에 안전하게 객체를 전달할 수 있게 가변 클래스의 복사 기능을 제공한다 = 212
 OBJ05-J. 반환하기 전에 클래스의 가변 private 멤버를 복사해 보호한다 = 218
 OBJ06-J. 가변 입력과 가변 내부 컴포넌트를 복사해 보호한다 = 223
 OBJ07-J. 기밀 클래스는 복제되지 않아야 한다 = 226
 OBJ08-J. 중첩된 클래스를 통해 private 멤버를 노출하면 안 된다 = 230
 OBJ09-J. 클래스를 비교할 때 클래스 이름으로 비교하면 안 된다 = 232
 OBJ10-J. final이 아닌 public static 변수를 사용하지 않는다 = 235
 OBJ11-J. 생성자가 예외를 발생시킬 수 있게 할 때는 주의한다 = 237  
CHAPTER 07 메서드(Met) 
 규칙 = 246
 위험 평가 요약 = 247
 MET00-J. 메서드 인자를 검증한다 = 247
 MET01-J. 메서드 인자를 검증할 때 절대로 assert를 사용하지 않는다 = 250
 MET02-J. 폐지되거나 폐지 예정인 클래스나 메서드를 사용하지 않는다 = 252
 MET03-J. 보안 검사하는 메서드는 반드시 private나 final로 선언해야 한다 = 254
 MET04-J. 숨기거나 오버라이드한 메서드의 접근성을 확대하지 않는다 = 256
 MET05-J. 오버라이드될 수 있는 메서드를 생성자가 호출하지 않게 보장한다 = 258
 MET06-J. clone() 메서드가 오버라이드될 수 있는 메서드를 호출하면 안 된다 = 260
 MET07-J. 상위 클래스나 인터페이스의 메서드를 가리는 클래스 메서드를 선언하지 않는다 = 263
 MET08-J. 동등 비교하는 객체는 동등 비교할 수 있게 보장한다 = 267
 MET09-J. equals() 메서드를 구현하는 클래스는 반드시 hashCode() 메서드를 구현해야 한다 = 277
 MET10-J. compareTo() 메서드를 구현할 때 일반적인 용법을 지원한다 = 279
 MET11-J. 비교 연산에 사용하는 키는 불변형이어야 한다 = 282
 MET12-J. finalize() 메서드를 사용하지 않는다 = 287
CHAPTER 08 예외 처리(ERR) 
 규칙 = 294
 위험 평가 요약 = 295
 ERR00-J. 필수처리 예외를 억제하거나 무시하지 않는다 = 295 
 ERR01-J. 예외에 의해 기밀 정보가 유출되지 않게 한다 = 302
 ERR02-J. 로그를 저장하는 동안 예외가 발생하지 않게 한다 = 308
 ERR03-J. 메서드가 실패하면 객체를 이전 상태로 복구한다 = 309
 ERR04-J. finally 블럭에서 갑작스럽게 빠져나가지 않는다 = 314
 ERR05-J. 필수처리 예외가 finally 블럭을 빠져나가지 못하게 한다 = 316
 ERR06-J. 선언하지 않은 예외를 발생시키지 않는다 = 320
 ERR07-J. RuntimeException, Exception, Throwable 예외를 발생시키지 않는다 = 325
 ERR08-J. NullPointerException과 상위 예외를 잡지 않는다 = 327
 ERR09-J. 신뢰하지 않는 코드가 JVM을 종료하지 못하게 한다 = 336
CHAPTER 09 가시성과 원자성(VNA) 
 규칙 = 340
 위험 평가 요약 = 340
 VNA00-J. 공유된 기본형 변수에 접근할 때 가시성을 보장한다 = 341
 VNA01-J. 불변 객체에 대한 공유된 참조의 가시성을 보장한다 = 345
 VNA02-J. 공유된 변수에 대한 복합 연산의 원자성을 보장한다 = 348
 VNA03-J. 독립적으로 호출한 일련의 원자적 메서드 전체를 원자적이라고 가정하지 않는다 = 356
 VNA04-J. 연결된 메서드를 호출할 때 호출된 전체 메서드의 원자성을 보장한다 = 363
 VNA05-J. 64비트 값을 읽고 쓸 때 연산의 원자성을 보장한다 = 367
CHAPTER 10 락(LCK) 
 규칙  = 370
 위험 평가 요약  = 371
 LCK00-J. 신뢰하지 않는 코드에 접근하는 클래스를 동기화하려면 private final 락 객체를 사용한다 = 371
 LCK01-J. 재사용될 수 있는 객체를 이용해 동기화하지 않는다 = 378
 LCK02-J. getClass( )에 의해 반환된 클래스 객체를 이용해 동기화하지 않는다 = 382
 LCK03-J. 상위 수준의 동시성 객체를 이용해 동기화하지 않는다  = 387
 LCK04-J. 지원 컬렉션에 접근할 수 있을 때 컬렉션 뷰로 동기화하지 않는다 = 388
 LCK05-J. 신뢰하지 않는 코드가 수정할 수 있는 static 필드를 접근할 때는 동기화한다 = 391
 LCK06-J. 공유된 static 데이터를 보호하고자 인스턴스 객체를 락으로 사용하지 않는다 = 393
 LCK07-J. 락을 동일한 순서로 요청하고 해제하여 데드락을 피한다 = 395
 LCK08-J. 예외 조건 처리 시 활성화된 락을 반드시 해제한다 = 406
 LCK09-J. 락을 활성화한 후 블럭될 수 있는 연산을 수행하지 않는다 = 410
 LCK10-J. 이중 검사 동기화의 잘못된 형태를 사용하지 않는다 = 415
 LCK11-J. 락 정책을 완전히 구현하지 않는 클래스를 사용할 때 클라이언트 측에서 락하지 않는다 = 421
CHAPTER 11 스레드 API(THI)  
 규칙  = 428
 위험 평가 요약  = 428
 THI00-J. Threadrun() 메서드를 호출하지 않는다  = 429
 THI01-J. ThreadGroup 메서드를 호출하지 않는다  = 431
 THI02-J. 특정 스레드 대신 대기하는 모든 스레드에 노티피케이션을 보낸다  = 436
 THI03-J. wait()와 await() 메서드는 언제나 루프 안에서 호출한다 = 443  
 THI04-J. 블럭된 연산을 수행하는 스레드는 종료될 수 있음을 보장한다 = 446 
 THI05-J. 스레드를 종료하고자 Threadstop() 메서드를 사용하지 않는다 = 453
CHAPTER 12 스레드 풀(TPS) 
 규칙 = 458
 위험 평가 요약 = 458
 TPS00-J. 트래픽이 폭주할 때 성능이 완만히 저하되게 스레드 풀을 사용한다 = 459
 TPS01-J. 스레드 풀 안에서 상호 의존적인 작업을 수행하지 않는다 = 463
 TPS02-J. 스레드 풀에 들어간 작업은 인터럽트될 수 있음을 보장한다 = 470
 TPS03-J. 스레드 풀에서 수행되는 작업이 에러 없이 실패하지 않게 보장한다 = 474
 TPS04-J. 스레드 풀을 사용할 때 스레드 로컬 변수가 다시 초기화되게 보장한다 = 478
CHAPTER 13 그 외 스레드 안전(TSM) 
 규칙 = 484
 위험 평가 요약 = 484
 TSM00-J. 스레드 안전한 메서드를 스레드 안전하지 않은 메서드로 오버라이드하지 않는다 = 485
 TSM01-J. 객체 생성 중 this 참조가 유출되지 않게 한다 = 489
 TSM02-J. 클래스 초기화 중 백그라운드 스레드를 사용하지 않는다 = 498
 TSM03-J. 일부분만 초기화된 객체를 공개하지 않는다 = 503
CHAPTER 14 입출력(FIO) 
 규칙 = 512
 위험 평가 요약 = 513 
 FIO00-J. 공유 디렉터리에 있는 파일에 작업하지 않는다 = 513
 FIO01-J. 파일 생성 시 적절한 접근 권한을 부여한다 = 525
 FIO02-J. 파일 관련 에러를 탐지하고 처리한다 = 527
 FIO03-J. 작업을 종료하기 전에 임시 파일을 삭제한다 = 530
 FIO04-J. 필요 없어진 리소스는 닫는다 = 534
 FIO05-J. 신뢰하지 않는 코드에 wrap()이나 duplicate() 메서드로 생성한 버퍼를 노출하지 않는다 = 540
 FIO06-J. 한 InputStream에 여러 버퍼 래퍼를 만들지 않는다 = 544
 FIO07-J. 외부 프로세스가 입출력 스트림을 기다리게 하지 않는다 = 548
 FIO08-J. 글자나 바이트를 읽는 메서드의 반환값을 저장하려면 int 형을 사용한다 = 552
 FIO09-J. 0부터 255 이외의 정수를 출력할 때 write() 메서드를 사용하면 안 된다 = 555
 FIO10-J. read()로 배열을 채울 때 배열이 제대로 채워졌음을 확인한다 = 557
 FIO11-J. 이진 데이터를 문자 데이터로 읽지 않는다 = 560
 FIO12-J. 리틀-엔디안 데이터를 읽고 쓰는 메서드를 제공한다 = 562
 FIO13-J. 신뢰 경계 외부에 기밀 정보 로그를 남기지 않는다 = 565
 FIO14-J. 프로그램을 종료할 때 적절히 정리한다 = 568
CHAPTER 15 직렬화(SER) 
 규칙 = 576
 위험 평가 요약 = 577
 SER00-J. 클래스를 변경할 때 직렬화 호환성을 유지한다 = 577
 SER01-J. 직렬화 메서드의 적절한 시그너처를 유지한다 = 580 
 SER02-J. 신뢰 경계 외부로 기밀 객체를 전송할 때 서명하고 봉인한다 = 584
 SER03-J. 암호화 안 한 기밀 데이터를 직렬화하지 않는다 = 591
 SER04-J. 보안 관리자를 피해 직렬화 및 역직렬화할 수 없게 한다 = 597
 SER05-J. 내부 클래스 객체를 직렬화하지 않는다 = 600
 SER06-J. 역직렬화하는 동안 private 가변 컴포넌트를 복사해 보호한다 = 602
 SER07-J. 불변 성질을 갖고 있는 객체는 기본 직렬화 형태를 사용하면 안 된다 = 604
 SER08-J. 높은 권한을 갖고 있으면 역직렬화하기 전에 권한을 최소화한다 = 610
 SER09-J. readObject() 메서드 안에서 오버라이드될 수 있는 메서드를 호출하지 않는다 = 613
 SER10-J. 직렬화하는 동안 메모리와 리소스가 누수되지 않게 한다 = 615
 SER11-J. Externalizable 객체의 내용을 덮어쓰지 못하게 한다 = 618
CHAPTER 16 플랫폼 보안(SEC) 
 규칙 = 620
 위험 평가 요약 = 621
 SEC00-J. 권한이 있는 코드가 신뢰 경계 외부에 기밀 정보를 유출하지 못하게 한다 = 621
 SEC01-J. 권한이 있는 코드 안에서 신뢰하지 않는 변수를 사용하지 않는다 = 625
 SEC02-J. 신뢰하지 않는 외부 데이터를 직접 보안 검사하지 않는다 = 628
 SEC03-J. 신뢰하지 않는 코드가 임의의 클래스를 로드하게 허용한 후 신뢰하는 클래스를 로드하면 안 된다 = 630
 SEC04-J. 보안 관리자 검사를 이용해 기밀 연산을 보호한다 = 634
 SEC05-J. 리플렉션으로 클래스, 메서드, 필드에 접근성을 확대하면 안 된다 = 637
 SEC06-J. URLClassLoader와 javautiljar가 제공하는 기본 자동 서명 검증 기능에 의존하지 않는다 = 645 
 SEC07-J. 사용자 정의 클래스 로더를 작성할 때 상위 클래스의 getPermissions() 메서드를 호출한다 = 650
 SEC08-J. 네이티브 메서드에 대한 래퍼를 정의한다 = 651
CHAPTER 17 런타임 환경(ENV) 
 규칙 = 654
 위험 평가 요약 = 654
 ENV00-J. 권한이 없는 연산만 실행하는 코드는 서명하지 않는다 = 655
 ENV01-J. 모든 보안 코드는 단 하나의 jar 파일에 넣어 서명하고 봉인한다 = 657
 ENV02-J. 환경 변수 값을 신뢰하지 않는다 = 662
 ENV03-J. 위험한 권한 조합을 부여하지 않는다 = 665
 ENV04-J. 바이트 코드 검증을 비활성화하면 안 된다 = 668
 ENV05-J. 원격에서 감시할 수 있는 애플리케이션은 배포하지 않는다 = 670
CHAPTER 18 기타(MSC) 
 규칙 = 678
 위험 평가 요약 = 678
 MSC00-J. 안전하게 데이터를 교환하려면 Socket 대신 SSLSocket을 사용한다 =679
 MSC01-J. 빈 무한 루프를 사용하면 안 된다 = 684
 MSC02-J. 강력한 난수를 생성한다 = 685
 MSC03-J. 기밀 정보는 결코 하드코딩하면 안 된다 = 688
 MSC04-J. 메모리를 누수시키지 않는다 = 691
 MSC05-J. 힙 영역을 고갈시키지 않는다 = 700 
 MSC06-J. 루프에서 나열하는 동안 참조하는 컬렉션을 수정하지 않는다 = 706
 MSC07-J. 싱글톤 클래스가 여러 객체를 만들지 않게 한다 = 711  
용어 = 722
참고문헌 = 730
찾아보기 = 750

관련분야 신착자료