Covenant

실험실을 사용하는 대학생, 대학원생이라면 피할 수 없는 연구실 안전교육...

  이번 학기에 실험 과목을 듣는 저는 의무적으로 연구실 안전교육을 수강해야 합니다. 연구실 안전교육은 대학 입학 이후 세 번째로 듣습니다만 그 동안 편법이 통했습니다. 국가연구원안전관리본부도 이를 인지하고 편법을 막고, 답안을 인터넷에 올리면 이수증을 취소하는 등 할수 있는 범위에서 노력을 하였으며 그 결과 인터넷에 교육을 넘길 수 있는 편법은 다 막혔으며, 2020년 답안이 검색되지 않습니다.
  편법을 어떠한 방식으로 막았는지 확인하기 위해서 연구실안전교육 자바스크립트 코드를 읽었고 시큐어코딩 관점 그 중 개발보안가이트 과점에서 재미있는 부분이 있어서 이렇게 글로 남깁니다.
  결론부터 언급하면 여전히 시큐어코딩을 지키지 않은 부분이 있습니다.

1번. 주석을 통한 주요 정보 노출

당혹스러울 정도로 자세한 주석

퀴즈 정답 노출

  자바스크립트는 클라이언트에게 넘어가는 코드이기에 배포 당시 주석을 제거 그리고 난독화를 해야합니다.
개발보안가이드에서는 이 부분에 대해서 다음과 같이 이야기하고 있습니다.

> 클라이언트 언어인 HTML 코드는 사용자에게 공개되어 있는 것과 마찬가지이므로 중요한 로직 및 주석처리는 서버측 언어에서만 처리되도록 설계해야 한다. (소프트웨어개발보안가이드, 122p)



2. 부적절한 인가

  에매하지만 제2절 보안기능 2. 부적절한 인가 부분에 해당할 수 있습니다.
자세한 설명은 생략하지만 console에 다음과 같이 입력했을 때 강의를 수강하지 않더라도 페이지를 끝까지 넘어갈 수 있습니다.

(function onEnd(){
    var chasiNum = Number(1);
    var pageNum = Number(222);
    alert(chasiNum + "페이지 부터 " + pageNum + "페이지까지 학습 완료")
    top.StudyFinish(chasiNum, "1", pageNum, "1")
    fsPage = top.finalStudyPage();
    alert(fsPage);
})();

3. 좋은 설계

  강의 페이지의 코드를 읽었을 때 두 곳의 외주회사에서 제작한 것으로 보입니다. 그러나 다른 회사에서 제작한 코드 때문에 강의를 끝까지 넘어갈 수 있지만 바로 난관에 봉착합니다. 시간을 채우지 않고 Skip한 경우 진도율이 95%로 고정, 최소 이수시간이 채워지지 않는 것입니다.
  이수 시간을 처리하는 코드는 정보를 백엔드(JSP)에서 처리하는 것을 볼 수 있습니다. 이는 브라우저의 자바스크립트 처리로는 조작할 수 없습니다.
  좋은 설계는 민감한 정보는 서버에서 처리를 하고 클라이언트에 반환하는 아주 단순하지만 중요한 개념을 사례를 보면서 볼 수 있었습니다.






광고꽝고~