"모던 웹을 이용한 안전한 웹앱 설계하기", 제 2회 대충콘 세미나 발표 및 시연 자료가 담겨 있습니다.
- php가 php7로 넘어가면서 보안 등등이 많이 개선 되었다는데 소감을 듣고 싶습니다
A. 개인적으로 PHP는 중소규모 웹 시스템을 구축하기 참 좋다고 생각하는 입장에서, 언어 사양이나 인터프리터의 개선을 통한 보안 강화 및 성능개선은 참 환영할 만한 일이라고 생각됩니다. 최근의 PHP8에서는 타 언어에서 편리하게 사용할 수 있었던 여러 문법들이 도입되었고, 평소 불편하다 생각했던 부분들이 개선되었다는 것에 대해 굉장히 반기고 있습니다.
- 최근 각 학교 수강신청 서버가 펑펑 터지고 있는데 예방하는 방법과 매크로 방지를 위한 웹프로그래밍에 대해 듣고 싶습니다
A. 수강신청 서버가 터지는건 보안 문제라기보다는 고가용성 시스템의 미비, 서버의 성능 부족, 회선 용량의 초과 등 여러 원인이 복합적으로 작용한 결과입니다. 학교와 같은 기관은 예산의 문제가 있기 때문에 옛날에 도입한 장비를 그대로 쓰는 경우가 많아 방금 얘기한 이슈들을 발생시키게 됩니다. 이러한 이슈들에 대응하려면 일차적으로는 NetFunnel등의 접근제어 솔루션을 도입하거나, 고성능 서버로 교체하거나, 혹은 로드 밸런서 등을 도입하여 부하를 분산시켜볼 수 있겠습니다. 만약 시스템이 클라우드에 있다면 Scale-up 등의 조치를 취하여 일시적으로 서버의 성능을 높여볼 수도 있겠습니다.
매크로는 기본적으로 사람이 하는 동작을 단순 반복한다는 점에서 CAPTCHA를 많이 도입하고 있습니다. 이를 통해 특정 반복 작업에 변칙을 줌으로서 매크로의 동작을 방해할 수 있습니다. 최근에는 구글의 reCaptcha(여러 사이트에서 많이들 보셨던 그 "로봇이 아닙니다")나 hCaptcha가 주로 사용되고 있습니다.
- HSTS에서 max-age을 통해 기간을 설정한다고 하셨는데, 설정 기한이 지난 후에는 어떻게 대처하나요? 기한이 지날 때마다 max-age 값을 다시 설정하나요?
A. HSTS 헤더가 수신된 시점에서 max-age가 지난 경우, 브라우저는 다시 서버에서 다시 수신하여 max-age를 설정하게 됩니다. (그래서 보통 1년으로 max-age를 설정합니다.) 그래서 이런 문제를 피하기 위해 앞서 설명했던 preload를 하면 이런 과정 없이 항상 HTTPS로 접속하게끔 할 수 있습니다. preload가 이루어지면 크롬 소스코드에 하드코딩되어 (물론 정식 릴리즈에 반영되기까지는 꽤나 시간이 걸립니다.) HSTS 헤더 수신과정 없이 바로 HTTPS 연결을 시도하게 됩니다.
- 현재 클라이언트 사이드 개발에서 헤더와 쿠키 쪽을 얘기하셨는데, 그 외에 개발에 있어서 주의해야할 부분이 있을까요? 아니면 헤더를 안전하게 설정하는 것만으로도 보안에 있어서는 안심을 할 수 있나요?
A. 가장 중요한것은 사용자의 입력을 철저하게 검증하는 것이 아닐까 라고 생각합니다. 각 언어/프레임워크 별로 시큐어 코딩 가이드가 나와 있는 경우가 많으니 이것들을 참고하여 잘 코딩하신다면 안전한 애플리케이션을 만드실 수 있습니다. 그리고 이에 더불어 제가 오늘 설명했던 헤더나 쿠키 설정들을 적절하게 이용한다면 웬만한 보안 공격에 대해서는 면역에 가까운 효과를 얻으실 수 있을겁니다.