[iOS] HttpCookie Secure, HttpOnly 옵션 추가 (보안취약점 대응)



# [iOS] HttpCookie Secure, HttpOnly 옵션 추가 (보안취약점 대응)

안녕하세요 __물먹고하자__ 입니다 :)
최근 업무들이 보안관련된 업데이트, 로직적인 부분 이런걸 주되게 하고 있는데,
그중에 WebView에 Cookie 셋팅해서 값을 전달하는게 보안취약점에 걸린게 있어서
저도 몰랐던 내용이라 적용했던부분 그리고, 제가도 다시 볼 내용 정리해서 공유드립니다.

---
## #. HttpCookie에 Secure, HttpOnly 를 추가하라고? 무슨내용인데..?
## 1. Secure 속성
> 💡 이 쿠키는 "HTTPS 연결을 통해서만" 서버로 전송된다.

- 네트워크 구간에서 평문(HTTP)으로 전송될 때 공격자에게 세션 쿠키가 노출되는 위험을 차단합니다.
- 공격자가 같은 네트워크(공용 와이파이 등)에 있더라도, HTTPS 암호화로 인해 쿠키 값을 가로챌 수 없습니다.
- 즉, 중간자 공격(MITM, Man-In-The-Middle) 으로부터 세션 탈취 방어.

## 2. HttpOnly 속성
> 💡 이 쿠키는 "JavaScript로" 접근할 수 없다.

- 브라우저의 document.cookie 로 쿠키를 읽을 수 없게 하여, XSS(Cross Site Scripting) 공격에 의해 쿠키가 탈취되는 것을 막습니다.
- XSS는 공격자가 웹 페이지 내에 악성 스크립트를 주입해서, document.cookie를 읽어 외부 서버로 전송하는 식으로 세션 탈취를 시도합니다.
- HttpOnly가 있으면 이 스크립트가 쿠키 내용을 읽지 못합니다.


---
## 3. Swift 코드에서 Secure, HttpOnly 옵션을 적용해보자
> 💡 기존 HttpCookie 설정부분에 추가로 옵션을 설정할 수 있음.
- Secure는 HTTPCookiePropertyKey 정의가 되어있고,
- HttpOnly의 경우 String으로 사용한다.

<!-- 코드 적용 이미지 -->
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUaSajmZf9-sPLeGyfLSQ_unWE975e1vITfFpbCRb0hZE5jMnquXg3BUqWMtgXl3aUBBK97f6BUEyI8erSlHsJK2ZajTh2eUtc_cWFrIlAFzIyAIGGRxfkruciriRNgMN4k5IZi2ejTAFwRCiWo_U9yLlohluYR3s-YVWHgmEMoSZ2ankuKqQmleXOylp/s2100/Xcode%E1%84%8B%E1%85%B5%E1%84%86%E1%85%B5%E1%84%8C%E1%85%B5.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="1562" data-original-width="2100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUaSajmZf9-sPLeGyfLSQ_unWE975e1vITfFpbCRb0hZE5jMnquXg3BUqWMtgXl3aUBBK97f6BUEyI8erSlHsJK2ZajTh2eUtc_cWFrIlAFzIyAIGGRxfkruciriRNgMN4k5IZi2ejTAFwRCiWo_U9yLlohluYR3s-YVWHgmEMoSZ2ankuKqQmleXOylp/s600/Xcode%E1%84%8B%E1%85%B5%E1%84%86%E1%85%B5%E1%84%8C%E1%85%B5.png" width="600"/></a></div>


<!-- WebView 디버깅 이미지 -->
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmZLHtKkb_SKBR4o4b5-NrJRdfVBjempTyuvVtoNndQh201o_EZbzOWh8oXKtv8F3XkSDUSIQ4n1MCNUxg8PF47CRzDkN3xbJvoCVbTmTH_RVBwAh3j8Hb93eiM-Ju9mjzuMwWkoV6CSX-AIsBqs3BQatAhlumTm9_A4K8rUMipeJFR-XDmmCQPwFG7J54/s2490/%E1%84%8B%E1%85%B0%E1%86%B8_%E1%84%91%E1%85%A6%E1%84%8B%E1%85%B5%E1%84%8C%E1%85%B5_%E1%84%8F%E1%85%AE%E1%84%8F%E1%85%B5_%E1%84%8E%E1%85%A6%E1%84%8F%E1%85%B3.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="1884" data-original-width="2490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmZLHtKkb_SKBR4o4b5-NrJRdfVBjempTyuvVtoNndQh201o_EZbzOWh8oXKtv8F3XkSDUSIQ4n1MCNUxg8PF47CRzDkN3xbJvoCVbTmTH_RVBwAh3j8Hb93eiM-Ju9mjzuMwWkoV6CSX-AIsBqs3BQatAhlumTm9_A4K8rUMipeJFR-XDmmCQPwFG7J54/s600/%E1%84%8B%E1%85%B0%E1%86%B8_%E1%84%91%E1%85%A6%E1%84%8B%E1%85%B5%E1%84%8C%E1%85%B5_%E1%84%8F%E1%85%AE%E1%84%8F%E1%85%B5_%E1%84%8E%E1%85%A6%E1%84%8F%E1%85%B3.png" width="600"/></a></div>



---
## 마무리
Secure, HttpOnly 옵션을 추가하는 부분은 어렵지 않게 우선끝내놨었는데,
해당 옵션을 추가하면 어떤 부분이 보안이 되는지 궁금해서 검색해서 정리만 같이 해놓았습니다.

오늘은 이만~

즐거운 코딩 되게요.

끝.


댓글