이미 소장하고 있다면 판매해 보세요.
|
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 원칙으로 인해 초기 기본 설정에 대한 진입 장벽은 매우 낮으며 이후 프로젝트와 관련한 보안 규칙을 원하는 대로 커스터마이징하거나 오버라이드할 수 있다. 이 책이 웹 보안으로 고민하는 많은 분들에게 아리아드네의 실 같은 책이 되기를 바란다. ---역자 서문 중에서 |
|
보안은 모든 애플리케이션의 핵심적인 부분 중 하나다. 보안에 취약한 애플리케이션은 해커의 좋은 표적이 된다. 이 책에서는 이미 충분히 검증된 스프링 시큐리티를 이용해 자바 개발자들이 웹 애플리케이션에 대한 해커의 공격을 막고 애플리케이션의 중요 자원을 보호하기 위한 완벽한 지침을 제시한다.
이 책은 스프링 시큐리티 3에 대한 상세 가이드 서적이다. 이 책에서는 실제 비즈니스 시나리오를 토대로 가장 최근에 일어나고 있는 보안 위협에 대처하는 법을 배우게 될 것이다. 아울러 LDAP, OpenID, CAS, 커베로스, 액티브 디렉터리와 같은 외부 시스템과 스프링 시큐리티를 연동하는 법도 배우게 될 것이다. 이 책에서는 보안 개념을 소개한 후 스프링 시큐리티 3를 설치하고 설정하는 것으로 시작한다. 그런 다음 JSP 기반 웹 애플리케이션을 토대로 간단한 e-커머스 웹사이트를 구현한다. 실제 비즈니스 시나리오를 토대로 예제를 진행하므로 스프링 시큐리티 3의 다양한 기능들을 경험하다 보면 어느새 스프링 시큐리티 3를 실무에 적용할 기반이 마련될 것이다. 후반부에서는 여러분이 자주 마주치게 될 법한 통합 시나리오를 다룬다. 여기서는 특정 시스템과의 연동과 관련한 복잡한 문제들을 해결하는 법을 배울 것이다. 마지막으로 기존 스프링 시큐리티 2 사용자를 위해 스프링 시큐리티 2에서 3로 마이그레이션하는 내용으로 마무리한다. 아울러 이 책에서 제시하는 실질적인 가이드와 현실적이고 손쉬운 예제는 웹 애플리케이션을 보호하는 데 스프링 시큐리티 3를 활용하고자 하는 이들에게 많은 도움이 될 것이다. 예상 독자 이 책은 웹 애플리케이션을 개발하는 자바 개발자들을 위한 책이다. 이 책의 독자는 자바, XML, 스프링 프레임워크에 익숙하다고 가정한다. 스프링 시큐리티를 처음 접하는 개발자라도 이 책을 충분히 활용할 수 있다. 이 책에서 다루는 내용 보안에 취약한 애플리케이션의 설계 결함 인식 기본 권한부여 및 크리덴셜 저장 기능 구현 스프링 시큐리티 2에서 스프링 시큐리티 3로 자연스럽게 마이그레이션 LDAP, Active Directory, NTLM과 같은 엔터프라이즈 서비스와의 연동 확장 및 커스터마이징을 통한 스프링 시큐리티 3의 활용 인하우스 애플리케이션 및 인기 있는 자바 프레임워크와의 연동 애플리케이션의 인증 및 권한부여에 가장 적합한 설정 적용 |