Windows Server 사용자 요청으로 HttpOnly 쿠키를 서버단에서 적용해 달라는 요청을 받게 되었습니다. 처음 해보는 작업이라 내용을 찾아보니 Set-Cookie와 관련된 작업으로 확인됩니다.
Set-Cookie는 서버 → 클라이언트(브라우저)로 쿠키를 내려줄 때 사용하는 HTTP 응답 헤더입니다. 브라우저(구글 크롬/마이크로소프트 엣지등)는 이 값을 저장했다가, 같은 도메인/조건이 맞는 요청을 보낼 때 자동으로 Cookie 헤더에 담아 서버로 보냅니다. 즉 서버가 사용자 식별(Seesion ID)이나 상태 유지, 인증, 개인화 기능 등을 구현할 때 가장 기본적인 메커니즘입니다.
여기서 HttpOnly를 적용하면 JS 코드에서 Document.cookie로 쿠키를 읽거나 수정하지 못하게 하고
XSS(Cross Site Scripting)=크로스 사이트 스크립팅 공격으로부터 쿠키 탈취 방어를 할 수 있으며, Secure는 HTTPS 연결을 통해서만 쿠키가 서버로 전송되게 합니다. 중간자 공격(MITM, Man In The Middle Attack)으로부터 보호할 수 있습니다.
쿠키는 인터넷에서 직접 눈에 보이지 않지만, 우리의 일상적인 웹 사용에 많은 영향을 주고 있습니다. 예를 들어 브라우저의 쿠키를 삭제하면 자동 로그인되던 사이트에서 다시 로그인해야 하고, 자주 방문하던 사이트가 평소보다 느리게 열리는 경험을 하기도 합니다. 이처럼 브라우저 쿠키 설정은 접속 편의성과 사이트 속도에도 직접적인 영향을 주는 요소입니다. 아래는 브라우저 쿠키 설정에 대한 예시입니다.
◈ 테스트를 위한 서버 준비(Windows Server 2012 R2)
① ASP.NET 4.X 설치 및 사이트 준비 (역할 및 기능 추가)
② 테스트 소스 준비 (① ASP.NET 4.X 설치가 되어 있어야 가능)
본인 웹 소스 경로에 .aspx 확장자로 2개의 파일을 아래의 소스코드를 복사하여 생성합니다.
◇ HttpOnly / Secure = True 「test.aspx (확장자 이름 주의)」 ※ChatGPT
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var c = new HttpCookie("TestCookie", "HelloCookie");
c.HttpOnly = true; // JS로는 안 보이는 쿠키
c.Secure = true; // HTTPS에서만 전송 (https로 접속해야 함)
c.SameSite = SameSiteMode.Lax; // 필요시 None/Strict
Response.Cookies.Add(c);
}
</script>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Cookie Test</title></head>
<body>
<h1>Cookie Test</h1>
<p>이 페이지를 새로고침하고 DevTools에서 확인하세요.</p>
</body>
</html>
◇ HttpOnly / Secure = False 「test2.aspx (확장자 이름 주의)」 ※ChatGPT
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
// HttpOnly 설정을 일부러 하지 않음
var c = new HttpCookie("TestCookieNoHttpOnly", "VisibleToJS");
c.Secure = false; // HTTPS 아니어도 전송 가능하도록 (테스트 목적)
c.SameSite = SameSiteMode.Lax;
Response.Cookies.Add(c);
Response.Write("OK - HttpOnly 없이 쿠키 내려보냄<br/>");
Response.Write("브라우저 DevTools → Application → Cookies 에서 확인해보세요.");
}
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Cookie Test</title>
</head>
<body>
<h1>HttpOnly 없는 Cookie Test</h1>
<script>
// HttpOnly를 끈 쿠키는 JS에서 바로 조회 가능
console.log("document.cookie =", document.cookie);
</script>
</body>
</html>
◈ Set-Cookie 쿠키 확인 방법
① 브라우저 개발자 모드에서 확인「F12」
※ 마이크로소프트 엣지(Edge) 브라우저에서 테스트를 했지만 대부분의 브라우저가 개발자 모드를 지원합니다. 구글 크롬(Chrome), 네이버 웨일(Whale) 이 3개는 같은 크로미움(Chromium) 오픈소스 브라우저로 개발되어 메뉴 위치나 확인 방식이 거의 비슷합니다.
◇ HttpOnly / Secure = True「test.aspx」테스트 쿠키 페이지 확인
HTTS 보안 연결 환경에서 HttpOnly, Secure 옵션이 적용된 쿠키를 확인할 수 있습니다. 아래 예시를 보면 클라이언트가 서버로 보낸 요청 쿠키에도 해당 속성이 유지되고, 서버가 응답할 때 내려주는 Set-Cookie 헤더에도 동일하게 적용된 것을 볼 수 있습니다. 즉, 서버와 클라이언트가 서로 안전한 방식으로 쿠키를 주고받고 있다는 의미입니다.
◇ HttpOnly / Secure = False「test2.aspx」테스트 쿠키 페이지 확인
HTTPS로 접속했음에도 이 쿠키는 Secure가 비활성화되어 있고 HttpOnly 속성도 일부러 제거한 상태입니다. 응답 쿠키(=Set-Cookie) 영역에서 두 속성이 표시(체크)되지 않는 것을 확인할 수 있습니다. 즉, 이 쿠키는 Document.cookie로 자바스크립트에서 읽고 쓸 수 있으며, XSS나 클라이언트 측 스크립트에 의해 노출될 가능성이 있습니다. 보안이 필요한 인증 정보나 세션 토큰은 반드시 HttpOnly와 Secure를 함께 적용해야 안전합니다.
② Curl(Client URL) 명령어를 이용한 확인
※ Curl 명령어는 HTTP, HTTPS, FTP 등 다양한 프로토콜을 사용하여 URL을 통해 서버에서 데이터를 가져오거나(다운로드) 서버로 데이터르 전송(업로드) 하기 위한 명령줄 도구이지만, 아래와 같이 옵션「-I (--head) HTTP HEAD 요청」을 이용하여 네트워크 정보를 파악할 수도 있습니다. Windows/Linux/Unix 서버 상관없이 툴이 설치되어 있으면 명령어 사용 가능합니다.
# curl -I (대문자) https://도메인주소 [응답 헤더만 받아오고 본문(body) 정보는 가져오지 않음]
◈ IIS HttpOnly, Secure 설정 및 적용 확인
※ IIS 설정 시 생기는 web.config 에서 직접 설정해도 되지만, 문법 오류나 오타가 있으면 IIS가 바로 500 에러가 발생하므로 IIS 관리자(GUI) 메뉴에서 추가하는 게 안전합니다.
◇ 사이트 선택 후 관리「구성 편집기」→ 섹션「system.web(httpCookies)」추가 → HttpOnlyCookies, requireSSL「True」변경
메인 홈 경로에서 web.config 파일 내부에 추가 확인(사이트 별로 적용)
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>
→ 적용 확인
◇ HttpOnly / Secure = False「test2.aspx」테스트 쿠키 페이지 재 확인
쿠키의 HttpOnly 속성은 클라이언트(브라우저)에서 따로 지정하지 않아도, 서버에서 강제로 설정하면 자동으로 적용됩니다. 즉, 서버가 Set-Cookie 헤더에 HttpOnly를 붙여 응답하면, 브라우저는 무조건 그 쿠키를 자바스크립트에서 접근 불가능한 보안 쿠키로 처리한다고 합니다.
따라서 개발자가 클라이언트 코드에서 HttpOnly를 지정하지 않더라도, 서버에서 강제 적용하면 브라우저는 이를 따르게 되고 결과적으로 XSS 공격으로부터 쿠키가 노출되는 것을 막을 수 있습니다. (서버가 내려주는 Set-Cookie 헤더에 따라 결정)
◈ PS① Windows Server 2022 IIS에서 테스트
취약한 RC4 알호화 알고리즘과 구버전 SSL/TLS 프로토콜을 비활성화하는 보안 조치를 진행하던 중, 관련 문의가 함께 들어와 같이 작업을 진행하게 되었습니다. 덕분에 보안과 관련한 여러 정보를 더 자세히 알게 되었고, 역시 직접 테스트해 보아야 직성이 풀려서 시간이 날 때마다 조금씩 작성해 오던 문서가 드디어 완성된 기분입니다.
평소에는 주로 리눅스 쪽을 관리하다 보니 Windows Server 관련 내용을 다룰 때 더 어색함을 느끼기도 했습니다. 아마 익숙함의 차이겠지요. 어쨌든 이번 작업이 보안 조치에 실질적인 도움이 되었기를 바랍니다.
'◈『OS』 > Windows Server' 카테고리의 다른 글
Windows Server - 취약 (RC4) 암호화 알고리즘 및 구버전 SSL/TLS 프로토콜 비활성화 (그 외 보안 조치 방법 추가) (0) | 2025.10.02 |
---|---|
Windows Server IIS - IP 주소 및 도메인 제한과 오류 페이지 설정 (0) | 2025.05.26 |
원격 데스크톱 연결 : 인증 오류 (NTLM 인증 차단, CredSSP 암호화 Oracle 수정) (2) | 2025.02.19 |
Windows Server 2025 - ISO 파일 다운(평가판) 및 설치 (0) | 2025.02.13 |
Windows Server 2022 - ISO 파일 다운(평가판) 및 설치 (0) | 2022.05.22 |