번역서 정보 | 번역서 질문&의견 | 번역 이야기 | 문서 창고 | 방명록

브라우저 해킹 vs 보안 독자 증정 이벤트 결과 발표

류광, 2014/11/11 18:18
브라우저 해킹 vs 보안 독자 증정 이벤트 문제 해설.

브라우저 해킹 vs 보안 독자 증정 이벤트를 이 시점에서 마감합니다. 답을 보내 주신 분이 두 분 밖에 없어서 자동으로 두 분이 대상자로 선정되었습니다. 두 분께는 따로 편지 드리겠습니다.

문제가 좀 어려웠나요? 본질적으로 어려운 문제는 아니지만 아마 이쪽에 관심이 없는 분에게는 이런 북마클릿의 의도 자체가 생소하지 않았나 합니다.

문제는 다음과 같았습니다.

[인용]

문제: 다음은 현재 서핑 중인 웹 페이지를 GpgStudy 게임 개발 소식의 사용자 임시 보관함에 등록하는 북마클릿입니다(원래는 한 줄인데 너무 길어서 줄을 좀 바꾸었습니다. 이 점이 답에 영향을 미치지는 않습니다). 이 코드에서 setTimeout(function ... 3000) 부분은 어떤 의미일까요?

javascript:(function(){var d=document;var s=d.createElement('script');
s.type='text/javascript';s.charset='UTF-8';
var h=encodeURIComponent(d.location.href);
s.src='http://gpgstudy.com/news/js/draft?u='+h;d.documentElement.appendChild(s);
setTimeout(function(){if(typeof gnd_added_=="undefined")
location.href='http://gpgstudy.com/news/add/draft?u='+h},3000)})()

해당 호출이 무슨 일을 하는지, 왜 그런 일이 필요한지 서술하시면 됩니다. 힌트: 짐작하셨겠지만 브라우저의 보안 기능과 관련이 있습니다.

채점 기준은 다음과 같습니다.

  • 북마클릿의 전체적인 목적은 현재 페이지 안에 결과를 표시하려는 것임을 언급 : +10점
  • setTimeout(...) 부분은 외부 JavaScript 코드의 적재가 실패하는 경우를 대비하는 것임을 언급: +10점
  • 적재 실패 이유 언급
    • https 페이지 안에서 http 자원을 적재하려 하면 적재가 실패할 수 있음을 언급: +10점
    • 현재 페이지의 Content Security Policy 설정 때문에 적재가 실패할 수 있음을 언급: +10점
      • Content Security Policy를 번역서에 쓰인 용어인 '내용 보안 정책'이라고 표현: +5점
  • setTimeout과 전역 변수를 이용한 방법 이외의 적재 실패 판정 방법 제안: +15점

추가로 설명하자면...

이 북마클릿의 전체적인 목적은 "현재 페이지를 GpgStudy 게임 개발 소식의 사용자 임시 보관함에 추가하되, 그 결과를 현재 페이지 안에 표시한다"는 것입니다. 간단한 북마클릿은 그냥 해당 URL(javascript: ... ) 안의 코드로 모든 일을 수행하지만, 이처럼 페이지 안에 새로운 HTML 요소를 추가하는 등의 좀 더 복잡한 작업을 수행하는 북마클릿은 현재 페이지 안에 동적으로 <script> 태그를 생성해서 외부 JavaScript 코드를 적재하는 방법을 사용합니다. 지금 예에서 setTimeout 호출 이전의 부분이 바로 그것으로, http://gpgstudy.com/news/js/draft?u={현재 페이지 URL}에 있는 JavaScript 코드를 가져옵니다. 그 JavaScript 코드는 임시 보관한 추가 성공 여부를 현재 페이지 안에 적절히 표시하고요.

그런데 웹사이트 또는 개별 웹페이지에 따라서는 현재 페이지 안에 외부 JavaScript 코드를 적재하지 못하는 경우가 있습니다. setTimeout 호출 부분은 그런 경우를 위한 대비책입니다. 앞에서 말한 외부 JavaScript 코드는 gnd_added_라는 변수를 정의하는데, 만일 3초가 지나도 그 변수가 정의되어 있지 않으면(typeof가 "undefined") 그 JavaScript 코드가 제대로 실행되지 않은 것으로 간주하고 사용자를 GpgStudy 게임 개발 소식의 임시 보관함 추가 페이지로 직접 재지정합니다.

적재가 실패하는 이유는 크게 두 가지인데, 하나는 HTTPS 페이지에서 HTTP 자원을 적재하려 드는 것이고, 또 하나는 웹페이지의 Content Security Policy(CSP, 내용 보안 정책)입니다. CSP를 이용하면 웹페이지별로 모든 외부 스크립트를 거부하거나, 특정 기원에서 비롯된 스크립트만 허용하도록(이를테면 구글 애드센스를 위해 google.com만 허용하는 등) 설정하는 것이 가능합니다. HTTPS - HTTP 경계 문제와 CSP 둘 다 번역서에서 다루고 있으니 참고하시고요.

그 외에, SOP(동일 기원 정책)은 무관하다고는 할 수 없지만 너무 광범위한 이유라고 생각합니다. 웹페이지에 외부 JavaScript 라이브러리(이를테면 구글 CDN의 jQuery 등)를 포함시키는 것은 아주 일상적인 일인데요. 지금 문제에서 염두에 둔 것은 그런 일상적인 관행과는 반대로 외부 JS의 적재를 명시적으로 금지하는 설정(CSP)이었습니다. 그리고 http://gpgstudy.com/ 서버 자체가 반응을 안 할 수도 있는데, 비현실적인 일은 아니겠지만 이벤트 취지와는 좀 안 맞는 답이겠고요.

setTimeout과 전역 변수 설정 여부를 이용해서 적재 실패를 판정한 후 사용자를 다른 페이지로 보내는 것은 사실 그냥 제가 궁여지책으로 고안한 것일 뿐이고(아무 반응이 없는 것보다는 나은), 아마 더 나은 방법이 있을 것입니다. CSP 자체를 우회하는 방법도 어쩌면 있겠지만 그것은 '공격'의 영역이므로 GpgStudy 게임 개발 소식을 위한 북마클릿에 사용할 수는 없겠고요.


재미있고 유익한 이벤트였죠?^^ 참여해 주신 모든 분께 축하&감사드립니다.

언제 북마클릿에 대해, 개발자는 물론 사용자에게도 도움이 될만한 내용으로 한 번 글을 써보겠습니다.

top
트랙백 0 : 의견 # + 0

알림 - 브라우저 해킹 vs 보안 독자 증정 이벤트 기간 연장

류광, 2014/11/10 16:31

원래 오늘 해답과 당첨자를 발표해야 하는데요. 참여가 생각보다 저조하고, 또 gpgstudy.com 메일 서버가 일부 웹메일 서비스에서 보낸 편지를 제대로 받지 못한다는 보고가 있어서 기간을 내일(화) 오후 6시까지 연장합니다.

중요: 이제부터는 event@gpgstudy.com 이 아니라 비공개 방명록에 답을 써주세요.

그리고 혹시 event@gpgstudy.com 으로 메일 보내셨는데 아무런 답장도 못 받으셨다면, 수고스럽겠지만 위의 비공개 방명록에 다시 올려 주세요.

진행이 매끄럽지 않은 점 사과 드립니다. 연장된 하루 동안 좀 더 많은 분이 참여했으면 좋겠습니다!

top
트랙백 0 : 의견 # + 0

브라우저 해킹 vs 보안 독자 증정 이벤트

류광, 2014/11/03 23:52
브라우저 해킹 vs 보안 독자 증정 이벤트 소식.

저번 글에서 약속한대로, Browser Hacker's Handbook의 번역서 브라우저 해킹 vs 보안를 독자 세 분께 한 권씩 증정합니다.

이번에는 간단한 문제 풀기입니다.

문제: 다음은 현재 서핑 중인 웹 페이지를 GpgStudy 게임 개발 소식의 사용자 임시 보관함에 등록하는 북마클릿입니다(원래는 한 줄인데 너무 길어서 줄을 좀 바꾸었습니다. 이 점이 답에 영향을 미치지는 않습니다). 이 코드에서 setTimeout(function ... 3000) 부분은 어떤 의미일까요?

javascript:(function(){var d=document;var s=d.createElement('script');
s.type='text/javascript';s.charset='UTF-8';
var h=encodeURIComponent(d.location.href);
s.src='http://gpgstudy.com/news/js/draft?u='+h;d.documentElement.appendChild(s);
setTimeout(function(){if(typeof gnd_added_=="undefined")
location.href='http://gpgstudy.com/news/add/draft?u='+h},3000)})()

해당 호출이 무슨 일을 하는지, 왜 그런 일이 필요한지 서술하시면 됩니다. 힌트: 짐작하셨겠지만 브라우저의 보안 기능과 관련이 있습니다.


  • 마감은 다음 주 월요일, 즉 2014년 11월 10일 오후 6:00
  • 답을 보낼 곳은 event@gpgstudy.com

입니다. 댓글로 다시면 안 됩니다!!!

*** 갱신: 기간과 답 보낼 곳이 바뀌었습니다. http://occamsrazr.net/tt/290 을 보세요. ***

마감 시간까지 제출된 답들을 미리 정해진 기준에 따라 채점해서 득점 순으로 세 분을 선정하겠습니다. 동점자가 있으면 http://www.random.org/를 이용해서 무작위로 추첨하고요.

미리 정해진 기준은 지금 공개하지 않겠습니다. 답이 포함되어 있어서요. 단, 기준에 '선착순'은 없다는 점은 말씀드릴 수 있습니다.

이번에도 이 증정 이벤트는 넷텐션후원합니다. 넷텐션 대표 배현직 님 고맙습니다.

많이들 참여해 주세요!

top
트랙백 0 : 의견 # + 0

Browser Hacker's Handbook 번역서 나왔습니다.

류광, 2014/10/28 05:01
Browser Hacker's Handbook 번역서 "브라우저 해킹 vs 보안" 출간 소식

본문 열기

top
TAG 번역서
트랙백 0 : 의견 # + 0

UNIX 고급 프로그래밍 제3판 독자 증정 이벤트 - "보물찾기" (종료)

류광, 2014/10/06 18:09
UNIX 고급 프로그래밍 제3판 독자 증정 이벤트 소식.

본문 열기

top
트랙백 0 : 의견 # + 0

◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [53] : NEXT ▶