[크로스 사이트 스크립팅: XSS]
- 참고 1: https://namu.wiki/w/XSS
- 참고 2: https://noirstar.tistory.com/266
- 참고 3: https://www.youtube.com/watch?v=bSGqBoZd8WM
- 개요
- 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법
- 공격에 성공시, 접속한 사용자는 삽입된 코드를 실행하며, 보통 의도치 않은 행동 수행 OR 쿠키/세션/토큰 탈취 당함
- 주로 JS를 통한 공격
- Stored XSS
- 사이트 게시판이나 댓글, 닉네임 등 스크립트가 "서버"에 저장
- 악성 스크립트가 있는 게시글 등을 열람한 사용자들은 악성스크립트 동작시키게 됨
- 주로 게시판에서 XSS 공격 많이 발생
- Reflected XSS
- URL 파라미터에 스크립트 넣어 실행
- 이건 보통 브라우저에서 걸러!
- http://testweb?search=
- 해커의 웹페이지로 쿠키값을 전송해줌
- 방지법
1. innerHTML 사용하지 마세요!
- textContent, innerText 활용하기
- 태그가 그냥 텍스트로 들어감
2. Vue.js 사용시, v-html 디렉티브에 사용자 제공 컨텐츠 절대 넣지마!!!
3. 쿠키에 HttpOnly 옵션을 사용하자!
- XSS로 쿠키 탈취 X
- 근데 로컬 스토리지에 토큰 있으면 탈취 가능함
4. XSS 특수 문자를 치환하기
- Spring에서는 오픈소스 Luxy XSS Servlet Filter 사용하자
- @RequestBody 에서는 이걸 막지 못함
- 참고: https://jojoldu.tistory.com/470
[SQL Injection]
- 참고 1: https://namu.wiki/w/SQL%20injection
- 참고 2: https://noirstar.tistory.com/264
- 개요
- 클라이언트의 입력값 조작하여 서버의 데이터베이스 공격
- 로그인 할 때 요런감성 SELECT user FROM user_table WHERE id='admin' AND password=' ' OR '1' = '1';
- 방지법
- 입력값에 대한 검증
- PreparedStatement 구문 사용
- 사용자 입력값이 DB 파라미터로 들어가기전에 DBMS가 컴파일하여 실행하지 않고 대기
- 단순 문자열로 바꿔버린다!
- 불필요한 Error Message 노출 멈춰!
개요
- Spring 기반의 어플리케이션의 보안 (인증/인가) 담당하는 스프링 하위 프레임워크
- 강력하고 커스텀이 용이한 접근 제어 프레임워크
- 인증/인가 등의 기능 쉽게 구현가능
- Dispatcher 전, Filter 레벨에서 처리
- 확장이 쉬움!
기능
- 인증/인가 서포트
- CSRF, Session Fixation, ClickJacking 등에 대한 웹 보안
- Servlet API 통합
- Spring MVC와의 통합
모듈
- SecurityContextHolder
- 보안 주체의 세부 정보를 포함하여 저장
- 응용 프로그램의 현재 보안 컨텍스트에 대한 세부 정보 저장
- SecurityContextHolder를 통해 SecurityContext에 접근 가능
- SecurityContext
- Authentication 보관
- SecurityContext를 통해 Authentication 객체 꺼내올 수 있음
- Authentication
- 현재 접근하는 주체의 정보와 권한을 담는 인터페이스
- UserPasswordAuthenticationToken
- AuthenticationProvider
- 실제 인증에 대한 부분 처리
- 인증이 완료된 객체 반환