책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 웹 서비스/웹 프로그래밍
· ISBN : 9788992939645
· 쪽수 : 424쪽
· 출판일 : 2010-12-15
책 소개
목차
01장 보안에 취약한 애플리케이션의 해부
보안 감사
예제 애플리케이션 소개
- JBCP 애완동물 상점 애플리케이션의 아키텍처
- 애플리케이션 개발도구
보안 감사 결과 검토
- 인증
- 권한부여
- 데이터베이스 크리덴셜 보안
- 민감한 정보
- 전송 레벨 보안
보안 문제 해결을 위한 스프링 시큐리티 3 사용
- 왜 스프링 시큐리티인가?
요약
02장 스프링 시큐리티 시작하기
핵심 보안 개념
- 인증
- 권한부여
간단한 절차를 통해 애플리케이션에 보안 적용하기
- 스프링 시큐리티 XML 설정 파일 구현하기
- web.xml 파일에 스프링 DelegatingFilterProxy 추가하기
- web.xml 파일에 스프링 시큐리티 XML 파일 레퍼런스 추가하기
- 부족한 부분들에 대한 고려사항!
보안은 복잡한 주제다?보호된 웹 요청의 아키텍처
- 요청은 어떻게 처리될까?
- auto-config가 내부적으로 하는 작업들
- 사용자들은 어떻게 인증받을까?
- 요청은 어떻게 권한부여를 받을까?
요약
03장 사용자 경험 개선
로그인 페이지 커스터마이징하기
- 커스텀 로그인 페이지 구현하기
로그아웃 기능 이해하기
- 사이트 헤더에 Log Out 링크 추가하기
- 로그아웃 동작 원리
remember me
- remember me 옵션 구현하기
- remember me 기능의 동작원리
- remember me 기능은 과연 안전할까?
비밀번호 수정 기능 구현하기
- 패스워드 변경 기능을 지원하도록 인 메모리 크리덴셜 스토어
- 확장하기
요약
04장 크리덴셜 안전하게 저장하기
스프링 시큐리티에서 데이터베이스를 사용한 인증 적용하기
- 데이터베이스 인증 스토어 설정하기
- 데이터베이스 기반 인증의 동작 원리
- 커스텀 JDBC UserDetailsService 구현하기
- 기본으로 제공되는 JDBC 기반 사용자 관리
JdbcDaoImpl에 대한 고급 설정
- 그룹 기반 권한부여 설정하기
- 데이터베이스 인증 시 레거시 또는 커스텀 스키마 사용하기
보안 패스워드 설정하기
- 패스워드 인코딩 설정하기
- 패스워드에 소금을 조금 치는 것은 어떨까?
솔트 패스워드 설정하기
- 패스워드 변경 기능 개선하기
- 커스텀 솔트 소스 설정하기
remember me 기능을 데이터베이스로 이전하기
- 데이터베이스에 상주하는 remember me 토큰 설정하기
- 데이터베이스에 저장된 토큰은 더 안전할까?
SSL을 사용한 사이트 보안
- SSL 사용을 위해 아파치 톰캣 설정하기
- 자동으로 사이트 영역 보호하기
요약
05장 미세 접근 제어
애플리케이션 기능과 보안에 대해 다시 생각하기
- 애플리케이션 보안에 대한 기획
- 사용자 역할 기획
- 페이지 레벨 보안 기획하기
다양한 미세 권한부여 방법
- 스프링 시큐리티의 태그 라이브러리를 사용해 조건에 따라 콘텐츠
- 렌더링하기
- 컨트롤러 로직을 사용해 조건적으로 콘텐츠 렌더링하기
- 페이지 내 권한부여를 설정하는 가장 좋은 방법은 무엇일까?
비즈니스 티어 보호하기
- 비즈니스 메서드 보안의 기본
- 메서드 보안의 여러가지 방식
- 메서드 보안의 동작 원리
고급 메서드 보안
- 빈 데코레이터를 사용한 메서드 보안 규칙
- 메서드 파라미터를 포함하는 메서드 보안 규칙
- 메서드 파라미터 바인딩의 동작 원리
역할 기반 필터링을 통해 메서드 데이터 보호하기
- 메서드 보안에 대한 합리적인 경고
요약
06장 고급 설정과 확장
커스텀 보안 필터 작성하기
- 서블릿 필터 레벨에서의 IP 필터링
커스텀 AuthenticationProvider 작성하기
- AuthenticationProvider를 사용해 간단한 싱글 사인 온 구현하기
- 여러 AuthenticationProvider 결합하기
- 요청 헤더를 사용해 싱글 사인 온 시뮬레이션하기
- 커스텀 AuthenticationProvider의 사용 시점에 대한 고려사항
세션 관리와 동시성
- 세션 고정 보호 설정하기
- 동시 세션 제어를 통해 사용자 보안 강화하기
- 동시 세션 제어의 다른 장점들
예외 처리 이해하고 설정하기
- 접근 거부 처리 설정하기
- AccessDeniedException을 일으키는 원인
- AuthenticationEntryPoint의 중요성
수동으로 스프링 시큐리티 인프라스트럭처 빈 설정하기
- Spring Security 빈 의존관계의 전체적인 설명
- 웹 애플리케이션 재설정하기
- 최소 스프링 시큐리티 환경 설정하기
고급 스프링 시큐리티 빈 기반 설정
- 세션 라이프사이클과 연관된 요소들 조정하기
- 다른 서비스들에 대한 수동 설정
- SpEL 표현식 핸들러와 Voter를 사용한 명시적 설정
- 메서드 보안에 대한 빈 기반 설정
- 명시적인 설정 마무리하기
- 어떤 방식의 설정을 택해야 할까?
인증 이벤트 처리
- 인증 이벤트 리스너 설정하기
- 수많은 애플리케이션 이벤트들
SpEL 표현식 핸들러의 커스텀 구현체 개발하기
요약
07장 접근 제어 목록
비즈니스 객체 보안에 접근 제어 목록 사용하기
- 스프링 시큐리티에서의 접근 제어 목록
스프링 시큐리티 ACL 지원 기능을 위한 기본 설정
- 간단한 대상 시나리오 가정하기
- HSQL 데이터베이스에 ACL 테이블 추가하기
- 접근 결정 관리자 설정하기
- ACL 지원 빈 설정하기
- 간단한 ACL 엔트리 생성하기
고급 ACL 주제들
- 퍼미션의 동작 원리
- 커스텀 ACL 퍼미션 선언
- 스프링 시큐리티 JSP 태그 라이브러리를 사용해 JSP에서
- ACL 활성화하기
- ACL을 지원하는 스프링 표현식 언어
- 뮤터블 ACL과 권한부여
- Ehcache ACL 캐싱
일반적인 ACL 디플로이에 대한 고려
- ACL 규모의 확장성과 성능 모델링
- 커스텀 개발에 들어가는 비용을 간과하지 말자
- 스프링 시큐리티 ACL을 꼭 사용해야 할까?
요약
08장 OpenID에 대한 개방
OpenID라는 약속의 땅
- OpenID 가입
스프링 시큐리티에서의 OpenID 인증 사용
- OpenID 로그인 폼 작성
- 스프링 시큐리티에서의 OpenID 지원 기능 설정
- OpenID 사용자 추가하기
OpenID 사용자 등록 문제
- OpenID 식별자가 해석되는 과정
- OpenID를 이용한 사용자 등록 구현
어트리뷰트 교환
- 스프링 시큐리티 OpenID에서의 AX 사용
- 현실에서의 AX 지원과 제약
- 구글 OpenID 지원
OpenID는 안전할까?
요약
09장 LDAP 디렉터리 서비스
LDAP 이해
- LDAP
- 일반 LDAP 어트리뷰트 이름
- 임베디드 LDAP 서버 실행
기본 LDAP 연동 설정
- LDAP 서버 레퍼런스 설정하기
- LDAP AuthenticationProvider 사용
- 임베디드 LDAP 문제 해결
스프링 LDAP 인증 방식 이해
- 사용자 크리덴셜 인증
- 사용자 역할 멤버십 판단
- UserDetails의 추가 어트리뷰트 매핑
고급 LDAP 설정
- 예제 JBCP LDAP 사용자
- 비밀번호 비교 vs. 바인딩 인증
- UserDetailsContextMapper 설정
- 또 다른 password 어트리뷰트 사용
- LDAP을 UserDetailsService로 사용
외부 LDAP 서버와의 연동
명시적 LDAP 빈 설정
- 외부 LDAP 서버 레퍼런스 설정
- LdapAuthenticationProvider 설정
- LDAP을 통한 마이크로소프트 액티브 디렉터리와의 연동
- UserDetailsService에 역할 검색 위임
요약
10장 CAS를 활용한 싱글 사인 온
CAS 소개
- 고수준 CAS 인증 흐름
- 스프링 시큐리티와 CAS
- CAS 설치와 설정
기본 CAS 연동 설정
- CasAuthenticationEntryPoint 추가
- CAS 티켓 검증 사용
- CasAuthenticationProvider를 활용한 진위성 증명
고급 CAS 설정
- CAS 단언으로부터의 어트리뷰트 조회
- 어트리뷰트 조회가 왜 유용할까?
- 추가적인 CAS의 기능들
요약
11장 클라이언트 인증서 인증
클라이언트 인증서 인증의 동작 원리
클라이언트 인증서 인증 인프라스트럭처 설정
- 공개 키 인프라스트럭처의 용도 이해
- 클라이언트 인증서 키 쌍 생성하기
- 톰캣 트러스트 스토어 설정
- 브라우저로 인증서 키 쌍 불러오기
- 테스트 마무리
- 클라이언트 인증서 인증 문제 해결
스프링 시큐리티에서의 클라이언트 인증서 인증 설정
- security 네임스페이스를 사용한 클라이언트 인증서 인증 설정
- 스프링 시큐리티가 인증서 정보를 사용하는 원리
- 스프링 시큐리티 인증서 인증의 동작 원리
- 나머지 부족한 부분들
- 듀얼 모드 인증 지원
스프링 빈을 사용한 클라이언트 인증서 설정
- 빈 기반 설정의 추가 기능
클라이언트 인증서 인증 구현 시 고려 사항-
요약
12장 스프링 시큐리티 확장 프로젝트
스프링 시큐리티 확장 프로젝트
커베로스와 SPNEGO 인증에 대한 기초 지식
스프링 시큐리티에서의 커베로스 인증
- 전체적인 커베로스 스프링 시큐리티 인증 흐름
- 준비 작업
- 커베로스 관련 스프링 빈 설정
- SPNEGO 빈을 security 네임스페이스에 연결하기
- 애플리케이션 서버 장비를 커베로스 영역에 추가
- 파이어폭스 사용자들에 대한 고려 사항
- 문제 해결
커베로스와의 연동을 위한 LDAP UserDetailsService 설정
커베로스와 함께 폼 로그인 사용하기-
요약
13장 스프링 시큐리티 3으로 마이그레이션하기
스프링 시큐리티 2에서 마이그레이션하기
스프링 시큐리티 3의 개선 사항
스프링 시큐리티 3에서의 설정 변화
- AuthenticationManager 설정 수정
- 세션 관리 옵션을 위한 새로운 설정 구문
- 커스텀 필터 설정에 대한 변경사항
- CustomAfterInvocationProvider에 대한 변경 사항
- 그 밖의 설정 변경 사항
패키지와 클래스 관련 변경 사항
요약
부록 추가 참고 자료
JBCP Pets 예제 코드 시작하기
사용 가능한 애플리케이션 이벤트
스프링 시큐리티 가상 URL
메서드 보안을 위한 명시적인 빈 설정
논리적인 필터명의 마이그레이션 참고 사항
책속에서
이 책은 웹 보안에 대해 고민하는 모든 사람들에게 추천하는 책이다. 저자인 피터 뮬라리엔은 스프링 프레임워크 포럼에서 고정 패널로 활동하고 있으며 오랜 시간 동안 많은 개발자들이 올린 질문에 답하고 의견을 나누었고 개발자들이 정말 궁금한 게 뭔지 알고 있는 뛰어난 개발자다. 저자는 이 책을 읽는 독자들이 스프링 시큐리티를 최대한 쉽게 이해하게끔 각종 다이어그램을 사용해 전체적인 흐름을 보여주고 한 주제를 한 번에 하나씩 찬찬히 설명한다. 저자의 오랜 경험에서 나온 혜안은 스프링 시큐리티를 공부할 때 독자들이 피부로 느끼는 궁금증을 해소하기에 부족함이 없으며 저자가 중간 중간 주는 팁은 보안 담당 개발자라면 항상 염두에 둬야 할 내용으로 가득 차 있다.
이 책은 크게 스프링 시큐리티 프레임워크의 기본 지식을 다루는 전반부(1~7장), 외부 시스템 연동을 다루는 후반부(8~12장), 마이그레이션을 다루는 13장으로 구성된다. 이 책은 레시피 형태의 책은 아니고 처음부터 하나씩 내용을 익히다 보면 어느새 기본 지식을 튼튼히 다질 수 있게 해주는 책이다.
역자는 스프링 시큐리티를 이루는 두 축인 인증(authentication)과 권한부여(authorization)에 대한 설명이 이 책의 핵심이라고 생각한다. 우선 이 두 가지에 대한 설명을 이해하고 나면 이후의 설명은 이러한 인증, 권한부여를 어디까지 미세하게 적용하고, 어느 부분과 연동할 것인가에 관한 상세 설명으로 볼 수 있다. 역자는 이 책의 인증과 권한부여에 대한 도입부 설명이 마치 아리아드네의 실(Ariadne's thread)과 같다고 느꼈다. 그리스 로마 신화에서 테세우스가 미노타우로스의 미로에서 아리아드네의 실을 붙잡고 미로를 무사히 빠져나올 수 있었던 것처럼 독자들도 인증과 권한부여에 대한 두 주요 주제에 대한 이 책의 설명을 이해하기만 하면 아무리 복잡한 권한 적용도 스프링 시큐리티를 통해 손쉽게 할 수 있을 거라 확신한다.
스프링 시큐리티는 말 그대로 스프링 기반의 보안 프레임워크다. 이 책에서는 스프링에 대한 기본 지식을 전제하지만 스프링에 대한 최소한의 지식(주로 스프링 웹 MVC)을 갖춘 자바 개발자라면 누구든지 이 책을 볼 수 있다. 스프링 시큐리티는 스프링의 CoC 원칙을 그대로 계승한 프레임워크다. 복잡한 설정이 싫은 개발자라면 관례를 따라 개발하면 되고, 프로젝트에서 복잡한 보안 규칙을 적용해야 한다면 단계적인 보안 선언을 통해 원하는 수준의 보안을 적용할 수 있다. CoC 원칙으로 인해 초기 기본 설정에 대한 진입 장벽은 매우 낮으며 이후 프로젝트와 관련한 보안 규칙을 원하는 대로 커스터마이징하거나 오버라이드할 수 있다. 이 책이 웹 보안으로 고민하는 많은 분들에게 아리아드네의 실 같은 책이 되기를 바란다.