보안 스캐너를 돌렸는데 결과 화면에 생소한 용어들이 가득합니다. SQL 인젝션, XSS, CSRF, CORS, HSTS... 뭔가 위험하다는 건 알겠는데, 정확히 뭔지 모르니 어떻게 대응해야 할지 막막합니다.
이 글은 웹 보안 용어를 처음 접하는 분들을 위한 용어 사전입니다. 코딩을 몰라도 이해할 수 있도록 일상적인 비유로 설명합니다.
SSL / TLS / HTTPS
SSL (Secure Sockets Layer)
인터넷에서 데이터를 암호화해서 전송하는 기술입니다. 쉽게 말하면 우편물을 봉투에 넣어 봉하는 것과 같습니다. SSL이 없으면 데이터가 그대로 이동해서 중간에 누가 가로채면 내용을 바로 볼 수 있습니다.
TLS (Transport Layer Security)
SSL의 업그레이드 버전입니다. 현재는 실제로 TLS가 사용되지만, 역사적 이유로 여전히 "SSL"이라 부르는 경우가 많습니다. TLS 1.0/1.1은 오래되고 취약하므로 TLS 1.2 이상을 사용해야 합니다.
HTTPS
주소창에 https://로 시작하는 사이트는 SSL/TLS 암호화를 사용합니다. http://는 암호화가 없습니다. 자물쇠 아이콘이 보인다면 HTTPS 적용이 된 것입니다.
SQL 인젝션 (SQL Injection)
비유: 입력 양식에 악성 명령을 숨겨서 데이터베이스를 직접 조종하는 공격입니다.
예를 들어, 로그인 창에 이메일을 입력할 때 공격자가 이메일 자리에 특수한 데이터베이스 명령어를 입력합니다. 서버가 이 입력을 그대로 데이터베이스에 전달하면, 비밀번호를 몰라도 로그인이 되거나 전체 사용자 목록이 노출될 수 있습니다.
왜 위험한가? 공격 성공 시 전체 데이터베이스 내용 열람, 수정, 삭제가 가능합니다. 사용자 개인정보, 비밀번호, 결제 정보가 모두 위험합니다.
XSS (Cross-Site Scripting)
비유: 다른 사람의 집 게시판에 독이 든 스티커를 붙여놓는 것과 같습니다.
공격자가 웹사이트의 댓글, 게시판, 검색창 등에 악성 스크립트 코드를 입력합니다. 서버가 이 코드를 그대로 페이지에 출력하면, 다른 사용자가 그 페이지를 방문할 때 악성 코드가 실행됩니다.
결과: 쿠키(로그인 세션) 탈취, 사용자를 가짜 사이트로 리다이렉트, 피싱 폼 삽입 등이 가능합니다.
CSRF (Cross-Site Request Forgery)
비유: 본인도 모르게 도장을 찍히는 것입니다.
사용자가 A 사이트에 로그인한 상태에서 악성 B 사이트를 방문합니다. B 사이트가 A 사이트에 사용자 권한으로 특정 요청(비밀번호 변경, 송금 등)을 몰래 보냅니다. 사용자는 아무것도 모르지만 A 사이트에서는 정상적인 요청으로 처리됩니다.
방어 방법: CSRF 토큰(일회용 비밀 코드)을 사용해 요청이 실제 사용자가 의도한 것인지 확인합니다.
CORS (Cross-Origin Resource Sharing)
비유: 우리 매장에서는 어느 대리점의 직원만 물건을 가져갈 수 있는지 정하는 규칙입니다.
브라우저는 기본적으로 다른 도메인에서 데이터를 가져오는 것을 막습니다. CORS는 서버가 "이 도메인에서 오는 요청은 허용한다"고 명시적으로 허락하는 정책입니다.
문제: CORS를 *(전체 허용)으로 설정하면 어느 사이트에서든 API를 호출할 수 있어 보안상 취약합니다. 허용할 도메인을 명시적으로 지정해야 합니다.
HTTP 보안 헤더
헤더는 웹 서버가 브라우저에게 보내는 메타 정보입니다. 보안 헤더는 브라우저에게 "이런 규칙을 지켜라"고 지시합니다.
주요 보안 헤더
- Content-Security-Policy (CSP): "이 사이트는 이 출처의 스크립트만 실행해도 된다." XSS 방어의 핵심.
- X-Frame-Options: "이 페이지를 다른 사이트의 iframe 안에 넣지 마라." 클릭재킹 방어.
- HSTS: "이 사이트는 앞으로 1년간 항상 HTTPS로만 접속해라." HTTP 강제 리다이렉트.
- X-Content-Type-Options: "파일 타입을 임의로 추측해서 실행하지 마라."
클릭재킹 (Clickjacking)
비유: 투명한 유리판을 가게 계산대 위에 올려놓고, 손님이 다른 버튼을 누르게 유도하는 것입니다.
악성 사이트가 정상 사이트를 투명한 레이어로 위에 올려놓습니다. 사용자는 악성 사이트의 버튼을 클릭한다고 생각하지만 실제로는 아래에 있는 정상 사이트의 버튼(결제, 동의, 전송 등)을 클릭하게 됩니다.
디렉토리 리스팅 (Directory Listing)
서버에서 폴더를 열었을 때 그 안에 있는 파일 목록이 그대로 보이는 상태입니다. 예를 들어 https://mysite.com/uploads/에 접속했을 때 업로드된 파일들의 이름이 목록으로 나타나면, 기밀 문서, 개인정보가 담긴 파일이 노출될 수 있습니다.
포트 스캔 (Port Scanning)
비유: 건물의 모든 문을 두드려서 어떤 문이 열려 있는지 확인하는 것입니다.
해커들은 서버에 연결된 수십~수천 개의 포트를 자동으로 스캔해 어떤 서비스가 실행 중인지 파악합니다. 필요 이상으로 많은 포트가 열려 있으면 공격 가능한 경로가 늘어납니다.
와일드카드 서브도메인 탈취 (Subdomain Takeover)
회사가 사용하다가 더 이상 사용하지 않는 서브도메인(old.mysite.com)이 있는데, DNS 설정은 남아있고 실제 서버는 삭제된 경우입니다. 해커가 그 서버 자리를 차지하면 old.mysite.com이 해커의 사이트로 연결됩니다. 사용자는 공식 도메인처럼 보이는 주소에서 피싱을 당하게 됩니다.
보안 용어를 알아야 하는 이유
보안 스캔 결과를 받았을 때 용어의 의미를 알면 어떤 것이 심각하고 어떤 것이 낮은 우선순위인지 판단할 수 있습니다. 모든 취약점을 개발자에게 맡기지 않더라도, 적어도 "이게 왜 위험한지"는 알고 우선순위를 정할 수 있어야 합니다.
보안은 개발자만의 영역이 아닙니다. 서비스를 운영하는 모든 사람이 기본 개념을 이해해야 합니다.
내 사이트에 어떤 취약점이 있는지 직접 확인해보세요 → CodeScan 무료 스캔