플러그인의 보안이라는게 단순히 외부에서 임의로 그 php 파일을 실행하는가가 중요한 것이 아닙니다. 태터툴즈의 플러그인 동작원리나 구조상 플러그인은 사용하기 시작하는 동시에 태터툴즈 그 자체의 일부가 되어 동작합니다. 그 안에 어떤 역할을 하는 코드가 들어있는지를 판단해서 양호, 불량을 구분하는 것은 불가능합니다. 물론 짧게 생각하면 특정 함수나 코드를 사용하지 못하게 하는 방법도 있겠습니다만, 피하는 방법은 얼마든지 있는데에다 오히려 플러그인의 자유도를 깎아먹는 결과가 됩니다. 결코 쉽게 생각할 수 있는 문제가 아닙니다. 플러그인의 동작구조를 확인해주시기 바랍니다.
서버 시스템에서 unzip 이나 tar 를 지원한다고 가정합시다. 그럼 이걸 어떻게 실행할까요? system() 혹은 exec() 를 사용해야 합니다. 이 함수들은 자칫하면 치명적인 위험요소가 될 수 있습니다. 심지어 보안을 위해 이 함수들을 아예 막아버리는 서버도 있습니다. 반대로 php 에서 이 함수의 사용이 가능하더라도 시스템의 설정에 따라 unzip 이나 tar 명령을 실행하지 못하는 경우도 발생할 수 있겠지요. 결코 standard 하지 않습니다. 배포판에 넣는 코드로서는 부적합하다는 결론이 됩니다.
더불어 요즘 저를 고민에 빠뜨린 문제 중 하나이기도 합니다만, zip 파일은 상대경로(relative path)를 포함할 수 있습니다. (e.g. ../../../../../../../somefile)
때문에 압축해제시 지정한(target) 디렉토리 밖의 다른곳에 파일을 풀어버릴 수 있다는 이야기입니다. 다행히 서버관리자의 보안 관리가 잘 되어 있다면 다른 경로에의 쓰기 권한이 없을테니 오류만 생기고 말겠지요 (사실 공식 배포본에 넣기에는 이미 이 시점에서 문제가 되지만요). 그렇지 않은 경우 서버 내의 다른 경로에 임의로 파일을 생성해 버리는 결과가 생길 수도 있습니다.
어느쪽이든 압축파일을 업로드 하게 해서 이를 '안전하게' unpack 하는 것은 어려운 일입니다. 만들면 어떻게든 '기능'을 만들 수는 있겠지만 '배포 가능한' 상태를 기대하는 것은 무리입니다. 적어도 지금의 구조로는, 말이지요. 함께 좋은 방법을 고민해서 찾아보면 어떨까요. 수많은 진보의 시작은 귀찮음에서 시작한다고도 하니까요 
laziel (2006-09-11 05:27:43)에 의해 마지막으로 수정