콘텐츠로 이동

2021 11 17

2021-11-17

웹 보안

  • [크로스 사이트 스크립팅: 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
  • [크로스 사이트 요청 참조 : CSRF] - 참고 1: https://namu.wiki/w/CSRF - 참고 2: https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95 - 참고 3: https://www.youtube.com/watch?v=atNmPzdvPD4 - 개요 - 사용자가 본인의 의지와 무관하게 공격자가 의도한 행동을 하게 함 - 수정/삭제 등의 Action - 사용자 패스워드 변경 페이지 및 타 시스템 로그인 연동과 같은 인증 취약점 찾아서 공격 - 공격이 이루어지기 위해서는... - 위조 요청 전송하는 서비스에 희생자가 로그인인 상태 - 희생자가 해커가 만든 피싱 사이트에 접속 - 방지법 1. Referer 체크 - 요청된 페이지의 정보인 Referer 체크 - 다른 페이지에서 보낸 요청인지 검증 - 즉 내가 메일을 보내서 사용자한테 - http://nolto.kro.kr/feeds/change 이런거 보내봤자 우리는 Referer check로 짜름 - 프론트/백이 분리되는게 보안적인 이점도 크네! 2. CSRF 토큰 - 폼 전송, 편집 시도 등을 할 때 사용자별로 CSRF 토큰이라는 이용자별 고유한 값을 만듦 - 요게 일치해야 수정/삭제가 가능하다~
  • [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 노출 멈춰!
  • [비밀번호 암호화] - 참고: https://st-lab.tistory.com/100 - HASH + SALT 로 암호화하자! - SALT: 해시 함수 돌리기 전에 원문에 임의의 숫자 더하는 것

Spring Security?

  • 참고: https://mangkyu.tistory.com/76
  • 참고: https://spring.io/projects/spring-security
  • 개요 - Spring 기반의 어플리케이션의 보안 (인증/인가) 담당하는 스프링 하위 프레임워크 - 강력하고 커스텀이 용이한 접근 제어 프레임워크 - 인증/인가 등의 기능 쉽게 구현가능 - Dispatcher 전, Filter 레벨에서 처리 - 확장이 쉬움!
  • 기능 - 인증/인가 서포트 - CSRF, Session Fixation, ClickJacking 등에 대한 웹 보안 - Servlet API 통합 - Spring MVC와의 통합
  • 모듈 - SecurityContextHolder - 보안 주체의 세부 정보를 포함하여 저장 - 응용 프로그램의 현재 보안 컨텍스트에 대한 세부 정보 저장 - SecurityContextHolder를 통해 SecurityContext에 접근 가능 - SecurityContext - Authentication 보관 - SecurityContext를 통해 Authentication 객체 꺼내올 수 있음 - Authentication - 현재 접근하는 주체의 정보와 권한을 담는 인터페이스 - UserPasswordAuthenticationToken - AuthenticationProvider - 실제 인증에 대한 부분 처리 - 인증이 완료된 객체 반환