| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 멀티캠퍼스it부트캠프
- 유레카 프론트엔드 대면
- LG유플러스 유레카 프론트엔드 대면
- streaming metadata
- 나눔스퀘어
- 리액트
- LG U+
- 부트캠프후기
- 핏로그
- 프론트엔드
- React
- 타입스크립트
- jandi
- input="password"
- 멀티캠퍼스부트캠프
- 엘지유플러스프론트엔드대면
- 유레카
- 유레카프론트엔드대면
- 웹시큐리티
- 유레카프론트엔드
- 상태관리
- 유레카 부트캠프 프론트엔드
- 마이배티스
- 스프링부트
- TypeScript
- sentry
- 이미지 파일 관리
- 유플텍플
- 미니프로젝트
- 입력처리방식
- Today
- Total
joooii
[65일차] 웹 시큐리티 본문

XSS (Cross-Site Scripting)
XSS는 공격자가 악성 스크립트(주로 JavaScript)를 웹 페이지에 삽입해 브라우저에서 실행시키는 공격이다.
이를 통해 쿠키, 세션 정보 탈취, 사용자 계정 도용, DOM 변조 등의 문제가 발생한다.
XSS 주요 종류
1) Stored XSS (저장형)
- 악성 스크립트가 서버(DB)에 저장
- 주로 게시판/댓글 등에서 발생
- 다른 사용자가 페이지 방문 시 자동 실행

2) Reflected XSS (반사형)
- 악성 스크립트가 URL 파라미터에 포함됨
- 서버가 검증 없이 입력을 다시 출력할 때 발생

3) DOM-based XSS
- 서버 응답은 문제없지만, JS가 DOM을 안전하지 않게 조작할 때 브라우저에서 스크립트가 실행됨

XSS 방어 전략
1) 출력 이스케이프(Escaping)
- HTML 특수문자 이스케이프(<, >, &)
- Java: HtmlUtils.htmlEscape(), OWASP Java Encoder 사용
- JavaScript: innerHTML 대신 textContent 사용, DOMPurify 사용
=> XSS 방어의 핵심은 출력 시 사용자 입력을 항상 이스케이프 처리하는 것이다.
2) CSP(Content Security Policy) 적용
- 인라인 스크립트 금지
- 외부 리소스 출처 제한
- fetch/XMLHttpRequest(XHR) 가능 도메인 제한
- HTTPS 강제 적용
3) 프레임워크의 기본 보안 기능 활용
React, Vue, Angular는 자동 Escape 처리된다.
CSRF (Cross-Site Request Forgery)
사용자가 인증된 상태라는 점을 악용하여, 사용자가 의도하지 않은 요청을 특정 사이트에 강제로 보내는 공격
예) 사용자 로그인된 상태에서 공격 사이트 방문 → 자동으로 은행 송금 요청이 전송됨
CSRF 방어 전략
1) CSRF 토큰 사용
사용자 세션과 연관된 고유한 토큰을 생성하여 모든 중요 요청에 포함시킨다.
2) SameSite 쿠키 속성
쿠키에 SameSite=Strict 또는 Lax 속성을 설정하여 크로스 사이트 요청에서 쿠키 전송을 제한한다.
3) CORS 정책 설정
적절한 CORS (Cross-Origin Resource Sharing) 정책을 구성하여 허용된 도메인 안에서만 리소스 접근을 허용한다.
4) Referer 검증
HTTP 요청의 Referer 헤더를 검사하여 요청이 유효한 출처에서 왔는지 확인한다.
SQL Injection (SQL 인젝션)
SQL Injection은 쿼리문에 악성 SQL 코드를 삽입해 DB를 조작하는 공격이다. 이렇게 되면 공격자는 권한 없이 DB에 접근하여 기밀 데이터를 추출하거나, 레코드를 변경/추가/삭제하며, 전체 시스템을 손상시킬 수 있기 때문에 아주 위험하다.

SQL Injection 공격 기법
1) 인증 우회
로그인 폼에 'OR' '1'='1'과 같은 입력을 삽입하여 비밀번호 검증 없이 로그인을 우회한다.
2) 데이터 유출
UNION 공격을 통해 데이터베이스의 테이블 이름, 열 정보 등 민감한 정보를 획득한다.
3) 데이터 조작
INSERT, UPDATE, DELETE 쿼리에 악성 코드를 주입하여 데이터를 변경하거나 삭제한다.
4) 관리자 권한 획득
데이터베이스 관리자 권한으로 쿼리를 실행하여 시스템 전체를 제여한다.
SQL Injection 방어 기법
1) Prepared Statements
쿼리와 데이터를 분리하여 SQL 인젝션 공격을 원천 차단하는 가장 효과적인 방법이다.
2) ORM 사용 (Object-Relational Mapping)
객체 관계 매핑 도구를 사용하여 SQL 쿼리 생성 시 SQL 인젝션 위험을 크게 줄일 수 있다.
3) 저장 프로시저
데이터베이스 내에서 매개변수를 받아 처리하는 저장 프로시저를 통해 안전하게 쿼리를 수행한다.
4) 최소 권한 원칙
데이터베이스 사용자에게 필요한 최소한의 권한만 부여하여 공격의 영향을 제한한다.
회고
프론트엔드를 학습하면서 웹 시큐리티를 공부할 필요성을 몰랐었다. 그러나 이번 웹 시큐리티 수업을 들으면서 프론트엔드 측면에서 웹 시큐리티의 중요성을 깨달았다.
특히 XSS, CSRF, SQL 인젝션 같은 취약점들이 단순히 서버 개발자의 영역이 아니라, 브라우저에서 데이터를 어떻게 출력하는지, 쿠키가 어떤 옵션으로 설정되어 있는지, 클라이언트에서 어떤 DOM API를 사용하느냐 같은 프론트단의 선택에서도 충분히 발생할 수 있다는 점이 크게 와닿았다.
앞으로 프로젝트를 진행할 때도 화면 구현뿐만 아니라, 보안 측면도 함께 고려해야겠다. 또한 최근 개인정보 유출 사건이 많이 발생하는 만큼 더욱 신경 써야 될 부분인 것 같다.


참고자료
웹 해킹 공격 (XSS, CSRF, SQL Injection etc)
Cross Site Scripting의 약자로 CSS라고 하는 것이 맞지만 이미 CSS가 Cascading Style Sheets의 약어로 사용되고 있어 XSS라 합니다.XSS는 게시판이나 웹 메일 등에 JavaScript와 같은 Script code를 삽입 해 개발자
velog.io
'TIL' 카테고리의 다른 글
| [79일차] UML와 종류 (0) | 2025.12.23 |
|---|---|
| [74일차] Spring Boot에서 이미지 파일 관리하기 (0) | 2025.12.16 |
| [64일차] JWT (0) | 2025.12.02 |
| [58일차] Zustand (0) | 2025.11.24 |
| [53일차] TypeScript와 Vite (1) | 2025.11.17 |