HSTS란? HTTPS 강제 연결의 원리와 max-age 설정 방법

HSTS가 HTTP 접속을 HTTPS로 강제하는 원리와 max-age, includeSubDomains, preload의 의미를 알아보고 Spring Security에서 안전하게 설정하는 방법을 살펴봅니다. 웹사이트에 접속할 때 주소창에 도메인만 입력하면 브라우저가 먼저 HTTP로 연결한 뒤 HTTPS로 이동하는 경우가 있다. 서버가 HTTP 요청을 받아 301 또는 302 응답으로 HTTPS 주소를 안내하는 방식이다. HTTPS로 최종 연결되므로 안전하다고 생각하기 쉽지만, 처음 발생한 HTTP 요청은 암호화되지 … 더 읽기

CSP란? XSS 공격을 줄이는 Content-Security-Policy 설정 방법

CSP의 개념과 XSS 공격을 줄이는 원리, 주요 지시어의 의미, Spring Security에서 Content-Security-Policy 헤더를 안전하게 설정하는 방법을 알아봅니다. 웹페이지는 HTML만으로 구성되지 않는다. 화면을 움직이는 JavaScript, 디자인을 담당하는 CSS, 이미지와 글꼴 등 여러 자원을 함께 불러온다. 이 과정에서 브라우저가 모든 출처의 스크립트를 제한 없이 실행한다면 XSS 취약점이 발생했을 때 피해가 커질 수 있다. CSP는 웹사이트가 사용할 수 … 더 읽기

CORS 설정 오류란? Access-Control-Allow-Origin 보안 설정 방법

CORS 설정 오류가 발생하는 원인과 Access-Control-Allow-Origin 헤더의 동작 원리, 취약한 Spring 설정 및 안전한 허용 출처 구성 방법을 알아봅니다. 웹서비스는 프론트엔드와 API 서버를 서로 다른 도메인으로 분리해 운영하는 경우가 많다. 예를 들어 화면은 https://app.example.com에서 제공하고 사용자 정보는 https://api.example.com에서 가져올 수 있다. 브라우저는 보안을 위해 출처가 다른 웹페이지의 응답을 자유롭게 읽지 못하도록 제한한다. 이때 신뢰할 수 … 더 읽기

탭내빙 공격이란? 새 창 링크가 피싱 페이지로 변하는 이유

탭내빙 공격이 발생하는 원인과 새 창으로 열린 외부 페이지가 기존 탭을 피싱 화면으로 바꾸는 과정, noopener를 이용한 방어 방법을 알아봅니다. 웹사이트에서 외부 링크를 누르면 새로운 탭이 열리는 경우가 많다. 사용자는 새 탭에서 내용을 확인한 뒤 이전 탭으로 돌아온다. 문제는 새로 열린 외부 페이지가 기존 탭과 연결된 상태라면 기존 페이지의 주소를 다른 곳으로 변경할 수 있다는 … 더 읽기

클릭재킹이란? 투명한 화면으로 클릭을 유도하는 공격 원리

클릭재킹

클릭재킹이 발생하는 원인과 투명한 iframe으로 사용자의 클릭을 가로채는 과정, X-Frame-Options와 CSP를 이용한 방어 방법을 알아봅니다. 웹사이트에서 이벤트 참여나 동영상 재생 버튼을 눌렀는데 실제로는 계정 설정이 변경된다면 어떨까. 사용자는 화면에 보이는 버튼을 눌렀다고 생각하지만, 브라우저에서는 그 위에 겹쳐진 다른 웹페이지의 버튼이 클릭될 수 있다. 이처럼 공격자가 화면을 여러 겹으로 구성해 사용자의 클릭을 의도하지 않은 기능으로 전달하는 … 더 읽기

오픈 리다이렉트 취약점이란? 피싱 주소로 악용되는 이유

오픈 리다이렉트 취약점

오픈 리다이렉트 취약점이 발생하는 원인과 정상 도메인이 피싱 링크에 악용되는 과정, 취약한 Java 코드 및 안전한 URL 검증 방법을 알아봅니다. 웹사이트는 로그인 완료, 결제 처리, 회원가입과 같은 작업이 끝난 뒤 사용자를 다른 페이지로 이동시킨다. 원래 보던 페이지로 돌아가거나 관련 서비스로 연결하기 위해 이동할 주소를 URL 파라미터로 전달하기도 한다. 이때 사용자가 입력한 주소를 제대로 확인하지 않고 … 더 읽기

HTTP 응답 분할 취약점이란? CRLF 삽입 공격과 예방 방법

HTTP 응답 분할 취약점

HTTP 응답 분할 취약점이 발생하는 원인과 CRLF 문자가 응답 헤더를 조작하는 과정, 취약한 Java 코드 및 안전한 예방 방법을 알아봅니다. 웹 서버가 브라우저에 보내는 HTTP 응답은 상태 코드, 응답 헤더와 본문으로 구성된다. 브라우저는 응답에 포함된 줄바꿈 문자를 기준으로 각 헤더를 구분하고, 빈 줄이 나오면 이후 내용을 본문으로 처리한다. 이때 사용자가 입력한 값이 응답 헤더에 그대로 … 더 읽기

XPath 인젝션이란? XML 데이터 조회문이 조작되는 원리

XPath 인젝션

XPath 인젝션 취약점이 발생하는 원인과 XML 데이터 조회문이 조작되는 과정, 취약한 Java 코드 및 변수 바인딩을 이용한 대응 방법을 알아봅니다. 웹 애플리케이션은 데이터베이스뿐 아니라 XML 문서에 저장된 정보를 검색하기도 한다. 사용자 계정, 상품 정보, 환경설정처럼 계층적인 데이터를 XML로 관리하고 XPath를 이용해 필요한 값을 찾는 방식이다. XPath 조회문을 만들 때 사용자가 입력한 값을 문자열로 직접 연결하면 … 더 읽기

LDAP 인젝션이란? 인증 우회가 발생하는 원인과 대응 방법

LDAP 인젝션

LDAP 인젝션 취약점이 발생하는 원인과 검색 필터 조작을 통한 인증 우회 원리, 취약한 Java 코드 및 안전한 LDAP 인증 방법을 알아봅니다. 기업이나 기관에서는 사용자 계정과 조직 정보를 한곳에서 관리하기 위해 LDAP을 사용하는 경우가 많다. 사내 시스템에 로그인할 때 입력한 아이디를 LDAP 디렉터리에서 검색하고, 계정 정보와 비밀번호를 확인하는 방식이다. LDAP 검색 조건을 만들 때 사용자가 입력한 … 더 읽기

SSTI 취약점이란? 서버 템플릿 인젝션의 원리와 방어 방법

SSTI 취약점

SSTI 취약점이 발생하는 원인과 사용자 입력이 서버 템플릿 표현식으로 실행되는 과정, 취약한 Java 코드 및 안전한 방어 방법을 알아봅니다. 웹 애플리케이션은 사용자마다 다른 화면을 만들기 위해 템플릿 엔진을 사용한다. 같은 HTML 문서에 로그인한 사용자의 이름, 상품 정보, 주문 내역과 같은 데이터를 넣어 완성된 페이지를 만드는 방식이다. 템플릿 엔진은 동적인 페이지를 효율적으로 개발할 수 있게 해주지만, … 더 읽기