티스토리 뷰
[면접 준비 - CS]XSS, CSRF, SQL Injection
Vagabund.Gni 2023. 4. 27. 10:37목차
XSS, CSRF, SQL Injection은 웹 보안에서 가장 많이 발생하는 취약점들이다.
말을 바꾸면 좋지 않은 의도를 가진 사람이 해당 서비스나 서비스를 이용하는 사용자를 공격하는 방법들인데,
이 글에선 하나씩 개괄적으로 보고 그 방지책에 대해 알아본다.
XSS(Cross-Site Scripting)
XSS는 악성 스크립트를 삽입하여 해당 페이지를 요청하는 사용자의 브라우저에서 실행되도록 하는 방식이다.
이 공격은 주로 사용자의 개인정보가 담긴 쿠키나 세션을 하이재킹해 권한을 탈취하는 것을 목적으로 한다.
최악의 경우 탈취한 권한으로 사용자의 계좌에서 돈을 인출하는 상황도 발생할 수 있기 때문에,
XSS는 최악의 보안 위협으로 간주되고 있다.
이를 방지하기 위해서는 입/출력 값의 스크립트 태그 검증 및 이스케이핑, HTTP Only 설정, CSP, HTTPS사용,
주기적인 웹 보안 테스트 등이 중요하다.
이스케이핑: 문자열에 포함된 특수문자 혹은 예약어를 다른 문자열로 치환하는 작업(ex: ' → \')
HTTP Only: 쿠키를 브라우저-서버 사이에서만 사용하도록 제한하는 설정. JS를 통해 접근할 수 없다.
CSP: HTTP 헤더를 사용하여 브라우저가 로드하는 리소스가 허용하는 출처를 명시적으로 작성하는 방법.
CSRF(Cross-Site Request Forgery)
CSRF(Cross-Site Request Forgery)는 위조된 요청(링크)을 클릭하도록 유도해
사용자가 모르는 사이에 공격자가 의도한 행위를 실행하도록 하는 공격 기법이다.
이때 주로 원래 페이지와 비슷하게 만들어진 위조 페이지가 전송되며, 이를 눌러 접근 시
원래 플랫폼은 해당 요청이 사용자의 정상적인 요청이라 판단해 수행하게 된다.
당연하게도 금융 범죄에까지 사용될 수 있으며, 잘 알려진 취약점이다.
추가로 이를 방지하기 위해서는 CSRF 토큰 사용, SameSite쿠키 속성, Referer 검증 및 추가 검증이 필요하다.
- CSRF 토큰
사용자의 세션에 CSRF 토큰을 저장한 뒤 모든 요청에 포함하도록 하는 방식.
공격자의 요청은 CSRF 토큰이 없기 때문에 서버에서 거부하게 된다. - SameSite 쿠키 속성 사용
쿠키 전송을 같은 사이트 내에서만 허용하는 속성.
이를 통해 타 사이트에서 요청하는 CSRF 공격을 막을 수 있다. - Referer 검증
HTTP 요청 헤어 중 Referer 값을 검증하여 같은 사이트에서 온 요청인지 판단하는 방법.
Referer 값은 쉽게 변조가 가능해 완전한 방어는 어려움.
SQL Injection
SQL Injection은 쉽게 말하면 사용자의 입력값을 조작해 서버에 쿼리를 날려 디비 자체를 공격하는 방식이다.
대부분의 웹 애플리케이션은 사용자가 입력한 데이터를 그대로 SQL 쿼리에 삽입하는데,
이때 해당 데이터에 디비에서 실행될 수 있는 SQL 문법을 포함하면 공격자는 디비 자체를 조작할 수 있다.
예를 들어 로그인 폼에서 "admin'--'"이라는 이름을 입력하면 아래와 같은 SQL문이 생성된다.
SELECT * FROM users WHERE username = 'admin'--' AND password = '입력한비밀번호';
이때 -- 이후의 구문은 주석처리가 되어 무시되기 때문에, 디비는 위 명령을 아래와 같이 해석한다.
SELECT * FROM users WHERE username = 'admin';
이렇게 되면 비밀번호 없이도 admin 계정으로 로그인할 수 있게 되는 것이다.
또한 비슷한 방법을 이용해 디비의 특정 데이터를 모두 삭제해 버린다거나 하는 일이 가능하기 때문에,
정상적인 서비스 이용을 위해선 반드시 막아야 하는 취약점이다.
SQL Injection을 방어하기 위해서는 가장 먼저 입력값 검증 및 이스케이프가 필요하다.
특수문자만 제거해 줘도 위와 같은 공격을 실행할 수가 없기 때문이다.
추가로 admin과 같이 디비에 바로 접근이 가능한 사용자에 대해서는 입력값 검증을 더욱 강화하는 방법이 있겠다.
'Development > Technical Interview' 카테고리의 다른 글
[면접 준비 - Java]접근 제어자(Access Modifier) (0) | 2024.06.03 |
---|---|
[면접 준비 - CS]프로세스 스케줄러 (0) | 2023.05.02 |
[면접 준비 - CS]Raster vs. Vector (0) | 2023.04.28 |
[면접 준비 - CS]객체 지향 프로그래밍 vs. 함수형 프로그래밍 (0) | 2023.04.25 |
[면접 준비 - CS]동기, 비동기 / 블로킹, 논블로킹 (0) | 2023.04.24 |
[면접 준비 - CS]프로그램/컴파일러&인터프리터/RAM 가격 (1) | 2023.04.22 |
- Total
- Today
- Yesterday
- 스프링
- Algorithm
- 칼이사
- 세계일주
- 유럽
- 지지
- 알고리즘
- 파이썬
- java
- 면접 준비
- 중남미
- 남미
- Python
- 여행
- a6000
- RX100M5
- 스트림
- Backjoon
- 세계여행
- 리스트
- 자바
- 야경
- 유럽여행
- BOJ
- 기술면접
- spring
- 백준
- 세모
- 동적계획법
- 맛집
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |