모인모인 의 보안 위험 이 주 는 교훈 ( learning from mistakes ) - 한빛 출판 네트워크 
 모인모인 의 보안 위험 이 주 는 교훈 ( learning from mistakes ) 
 저자 : 스티브 피긴스 ( Stephen Figgins ) , 역 전순재 
 필자 가 파이썬 의 위키 프로그램 ( Python wiki program ) 인 모인모인 ( MoinMoin ) 에 대한 사설 을 새롭 게 쓰 자 마 자 위르겐 헤르만 ( Jugen Hermann ) 은 다음 과 같 은 주의 와 함께 새로운 버전 을 선언 하 였 다 . 
 이 버전 은 보안 업데이트 이 다 . 이 때문 에 긴급히 배포 하 게 되 었 다 . 수정 된 버전 은 exec ( ) 호출 들 을 __ import __() 로 대체 한다 . 이렇게 하 는 것 이 훨씬 더 안 전하 다 ( 실제로 는 , 완전 하 게 불 안전 한 것 과 대비 해 보 았 을 때 안 전하 다 ) . 만약 배포 버전 0 . 5 또는 0 . 6 을 설치 하 였 다면 , 당장 업그레이드 하 라 ! 
 짧 은 배포 주 기 때문 에 코드 가 0 . 6 이 든 0 . 7 이 든 큰 차이 가 있 지 는 않 을 것 이 다 . 그래서 바뀐 부분 들 을 쉽 게 찾 을 수 있 다 . 필자 는 무엇 인가 배울 기회 가 있 다는 게 너무 좋 다 . 0 . 6 버전 의 복사본 을 하나 얻 어서 0 . 7 과 비교 해 보 았 다 . 모인모인 에 는 헤르만 이 같 은 코드 를 사용 하 기 를 원했 지만 결국 서로 다른 라이브러리 중 의 하나 를 그 코드 가 사용 하 도록 선택 한 곳 이 여러 군데 있 었 다 . 이것 을 이른바 플러그 - 인 이 라고 부른다 . 헤르 만 은 플러그 - 인 을 사용 하 여 마임 - 형 ( mime - type ) [ 1 ] 에 따라 포 매터 [ 2 ] 들 을 선택 하 거나 폼 [ 3 ] 으로부터 제출 되 는 정보 의 형 에 따라 특수 한 해 석기 ( parser ) 나 확장 마크 로 집합 을 선택 한다 . 사용 할 플러그 - 인 의 이름 은 CGI 가 건네 주 는 정보 로부터 얻 는다 . 
 예 를 들 어 , 다음 코드 는 포 메터 를 임포 트 하 기 위해 사용 된다 . 
 ( string . replace ( mimetype , "/", "_"),)) 
 그렇 지만 mimetype 은 신뢰 할 수 없 는 바깥쪽 소스 에 있 는 프로그램 에 건네 지 는 정보 로부터 얻 는다 . 보안 상 그렇게 큰 누수 처럼 보이 지 않 을지 도 모르 지만 어떤 누수 라도 위험 한 것 이 다 . 누군가 mimetype 에 건네 지 는 문자열 을 조작 할 수 있 기 때문 이 다 . exec 함수 는 건네 지 는 어떤 코드 라도 실행 할 것 이 다 . exec 을 사용 해서 생각 지 않 게 위험 한 코드 조각 을 실행 할 수 도 있 다 . 다음 은 헤르만 이 어떻 게 그 문제점 을 고쳤 는지 보여준다 . 그 는 이러 한 exec 문자열 들 을 다음 유틸리티 함수 로 대체 하 였 다 . 
 __ import __ 함수 는 오로지 지정 된 코드 만 을 임포 트 한다 . 만약 ( 이 함수 에 modulename 으로 건네 지 는 ) mimetype 이 조작 되 었 다고 하 더라도 여러분 은 뜻밖 의 침입자 가 아니 라 단지 임포 트 에러 를 맞이 할 뿐 이 다 . 
 이러 한 종류 의 에러 들 은 펄 ( Perl ) 에서 는 taint 모드 가 포착 하 도록 디자인 되 었 다 . 이 편집증 환자 ( paranoid ) 모드 에서 , 프로그램 외부 에서 받아들인 정보 는 이 경우 의 mimetype 에 할당 되 는 문자열 처럼 정규 표현식 에 의해서 점검 되 지 않 는 한 오염 ( tainted ) 되 었 기 때문 에 거부 된다 . 이 모드 가 하나 더 추가 해 주 는 단계 는 여러분 이 아무 생각 없이 떠나 기 전 에 멈추 어서 생각 하 도록 디자인 되 었 다 . 
 파이썬 에 는 taint 모드 와 동등 한 것 은 없 다 . 그러나 위험 하 다고 여겨 지 는 코드 를 제한 하 도록 도와 주 는 모듈 은 있 다 . 이 모듈 은 제한 된 실행 모듈 또는 RExec 모듈 이 라고 불린다 . 이 경우 에 는 RExec 모듈 은 필요 없 다 . 왜냐하면 설치 된 코드 만 을 임포 트 할 필요 가 있 을 뿐 이 지 사용 자 가 제공 한 코드 를 평가 할 필요 가 있 는 것 은 아니 기 때문 이 다 . __ import __ 함수 는 이러 한 목적 을 훌륭 하 게 만족 시킨다 . 그렇지만 수많 은 CGI 와 작업 할 경우 여러분 은 Rexec 에 대해 고려 해 보 아야 할 것 이 다 . 
 [ 1 ] Multipurpose Internet Mail Extensions ( 다용 도 인터넷 메일 확장 ) : 마임 형 은 " 파일 종류 / 파일 포맷 " 형태 로 표현 됨 
 [ 2 ] formatter ( 포 매터 ) : 문서 의 형식 을 특정 용도 로 사용 하 기 위해 조작 하 는 프로그램 ( 형식 화기 ) 
 [ 3 ] form ( 폼 ) : 웹 에서 정보 를 입력 받 을 때 사용 하 는 일정 한 모양 의 문서 양식 ( 웹 입력 양식 ) 
 스티브 피긴스 ( Stephen Figgins ) 는 오라일리 네트워크 편집자 이 자 파이썬 데브 센터 책임자 이 다 . 
 이전 글 : Programming C # - 4 부 
 다음 글 : SMTP 를 이용 해서 이메일 전송 하 기