테터툴스/텍스트큐브 파일 업로드 버그 우회 성공



태터툴스 사용자 질답 게시판에 가보면 심심찮게 파일 업로드가 작동 하지 않는다는 증상을
호소 하는 사용자들을 볼 수 있다.
나 역시 처음 태터툴스를 설치하고 첨부파일이 업로드 되지 않아 질답란에 문의 해 보았으나
뾰족한 해답은 찾을수가 없었다..
익숙하지도 않은 php랑 씨름하기도 귀찮고 해서 이미지 파일이야 갤러리에 올린 후 링크로 글을 작성 하는 형태로 그럭저럭 포스팅하고 있었다..

하지만 이 정전 협정은 그리 오래가지 못했으니...

문제는 내 사진이 아닌 이미지를 포스팅 할 일이 생기면서 발생한다.
내가 촬영한 이밎도 아닌것을 내 갤러리에 올리고 포스팅을 작성하는건 왠지 꺼름칙하다..
다시한번 태터 사용자 홈의 질답란을 꼼꼼히 훑어 보기 시작했다..
역시나 도움이 되는 얘긴 없다..

짜증나지만 php소스를 또 봐야 한다니..

결국, 우회책을 찾아내었고 이렇게 해결책을 제시하니 업로드문제로 고생하시는 분들은
참고 히시어 조금이나마 스트레스를 덜어 보길 바란다.

우선 태터툴스 에서 글을 작성하면서 파일을 업로드 할 수 있는 부분은  
새 포스팅을 작성 할 때와 포스트를 수정 할 때이다.
각각의 소스는
[계정의 태터툴스 설치 디렉토리]/tt/blog/owner/entry/post/index.php 와
[계정의 태터툴스 설치 디렉토리]/tt/blog/owner/entry/edit/item.php
이다.

각각 1879라인과 1900 라인 쯤을 보면( 그냥 파일열고 찾기(Ctrl+F) 로 'uploaderNest'를
찾는게 빠를것이다. ) 아래와같은 코드가 존재한다.



  1. <?php
  2.     require_once '../../../../script/detectFlash.inc';
  3.     $maxSize=min(return_bytes(ini_get('upload_max_filesize')),return_bytes(ini_get('post_max_size')));?>
  4.  
  5.                                             <div id="uploaderNest">
  6.                                                 <script type="text/javascript">
  7.                                                     //<![CDATA[
  8.                                                         var requiredMajorVersion = 8;
  9.                                                         var requiredMinorVersion = 0;
  10.                                                         var requiredRevision = 0;
  11.                                                         var jsVersion = 1.0;
  12.                                                        
  13.                                                         var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
  14.                                                         uploaderStr = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="uploader"'
  15.                                                             + 'width="0" height="0"'
  16.                                                             + 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'
  17.                                                             + '<param name="movie" value="<?php
  18.     echo $service['path'];?>/script/uploader/uploader.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="scale" value="noScale" /><param name="wmode" value="transparent" /><param name="FlashVars" value="uploadPath=<?php
  19.     echo $param['uploadPath'];?>&labelingPath=<?php
  20.     echo $param['labelingPath'];?>&maxSize=<?php
  21.     echo $maxSize;?>&sessionName=TSSESSION&sessionValue=<?php
  22.     echo $_COOKIE['TSSESSION'];?>" />'
  23.                                                             + '<embed id="uploader2" src="<?php
  24.     echo $service['path'];?>/script/uploader/uploader.swf" flashvars="uploadPath=<?php
  25.     echo $param['uploadPath'];?>&labelingPath=<?php
  26.     echo $param['labelingPath'];?>&maxSize=<?php
  27.     echo $maxSize;?>&sessionName=TSSESSION&sessionValue=<?php
  28.     echo $_COOKIE['TSSESSION'];?>" width="1" height="1" align="middle" wmode="transparent" quality="high" bgcolor="#ffffff" scale="noScale" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><\/embed><\/object>';
  29.                                                        
  30.                                                         if (hasRightVersion && (isMoz || isIE)) {
  31.                                                             if(<?php
  32.     echo (isset($service['flashuploader'])&&$service['flashuploader']===false)?'false':'true';?>){ writeCode(uploaderStr); }
  33.                                                         }
  34.                                                     //]]>
  35.                                                 </script>
  36.                                             </div>





익스플로러와 익스플로러가이닌 브라우저에 대한 플래시 오브젝트를 삽입 해 주는
구문이 보인다. 여기서 id="uploader" 와 id="uploader2" 값이 보일텐데 이 값을
바꿔주면된다.
id="uploader" 를 id="uploader3" 로
id="uploader2" 를 id="uploader" 로 말이다.(한마디로 스크립트에서 이 dom 객체를 찾을 수 업도록 해버린다. )
그런다음 두 파일을 저장 한 후 관리자 로그인 해서 글쓰기나 글 수정에 들어가 보면
업로드 버튼이 플래시 아이콘이 아닌 일반 브라우저용 아이콘으로 바뀌어있으며 파일 업로드도 잘 될것이다.

사용자 삽입 이미지



사용자 삽입 이미지


2007.08.22. 추가
TNF 포럼에 config.php를 수정하는 방법이 올라와 있네요.
http://forum.tattersite.com/ko/viewtopic.php?id=3542

config.php의
$service['flashuploader']  = false;
로 플래시 업로더를 비활성화 할 수 있다고 합니다.
2007/04/09 18:42 2007/04/09 18:42
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 서비님! ^^ 서비님 말씀하신대로 해봤는데요... 그래도 여전히 해결이 되질 않네요... ^^;;; 아예
    Parse error: parse error, unexpected '?' in /home/hosting_users/ccume/www/tt/blog/owner/entry/post/index.php on line 147
    이렇게 나오는데... ㅡ_ㅡ^ 어떻게 하죠?

  2. jjungs님 테터툴스 버전이 어떻게 되시나요?
    전 1.1.1.1 이후버전부터 사용해서.. 그 이후버전에서만 적용 해 봤습니다.

    올려주신 에러 행의 제 쪽 소스를 보니

    @mysql_query('SET SESSION collation_connection = \'utf8_general_ci\'');
    if(function_exists('mysql_real_escape_string')&&(mysql_real_escape_string('ㅋ')=='ㅋ')){ <-- 147 라인 입니다.
    function mysql_tt_escape_string($string,$link=null){
    return is_null($link)?mysql_real_escape_string($string):mysql_real_escape_string($string,$link);
    }
    }else{
    function mysql_tt_escape_string($string,$link=null){
    return mysql_escape_string($string);
    }
    }

    요런 내용이 기술되어 있네요..
    제가 php쪽을 잘 아는건 아니지만 적어주신 에러내용은 문법오류이거나 변수에 값을 할당할때 나는 문제 같은데
    위 소스와 비교해보면 제가 제안한 스크립트에서 폼엘리먼트를 못찾게 하는부분과의 연관성을 찾아볼 수가 없습니다.

    혹 사용하시는 테더툴스 버전이 이전버전이 아니신지요..
    저 에러가 페이지가 열리면서 나는건지 파일선택하고 업로드하면 나는건지도 궁금합니다.
    jjungs님의 /home/hosting_users/ccume/www/tt/blog/owner/entry/post/index.php 의 147라인부근 코드가
    어떤건지도 궁금해 집니다. ^^

  3. 확인해보니깐요...

    @mysql_query('SET SESSION collation_connection = \'utf8_general_ci\'');
    if(function_exists('mysql_real_escape_string')&&(mysql_real_escape_string('??)=='??)){ <-- 147 라인 입니다.
    function mysql_tt_escape_string($string,$link=null){
    return is_null($link)?mysql_real_escape_string($string):mysql_real_escape_string($string,$link);

    이렇게 되어 있네요... ㅡ_ㅡ^

  4. 서비님것과 똑같이 복사해서 올렸더니... 오히려... 이런 글이...
    Parse error: parse error, unexpected T_STRING in /home/hosting_users/ccume/www/tt/blog/owner/entry/post/index.php on line 1461
    결국... 지금 포기하려는 중입니다.. ㅡ_ㅡ^

  5. 결국 복구하고... 일단 이대로 쓸 생각입니다. ㅡ_ㅡ^ 어도비 플래시 플레이어 9 activex 를 설치를 하지 않으면 되더군요... ㅡ_ㅡ^
    파폭으로 일단 사용해야 겠네요. 신경써주셔서 감사합니다. ^^

  6. 도움이 못 되어드려 죄송합니다.
    그래도 나름의 해결방안을 찾으셨다니 다행입니다.

  7. 저는 이대로 하니까 되는군요.
    좋은 방법 고맙습니다~

  8. steven 님 저의 얼렁뚱땅한 방법이 도움이
    되었다니 감사합니다.

  9. Blog Icon
    locate

    감사합니다

    다른버전으로 갈아탈까 했는데 올려주신 팁보고 해결했습니다

    uploade 이름을 다른걸로 바꿔줘도 잘작동 합니다. 감사합니다!

  10. locate님 도움이 되셨다니 감사합니다.

  11. 덕분에 문제 해결했습니다. 플래시 플레이어 최신 버전과 mod_security와의 궁합 문제로 인해 발생하는 현상이란 것도 알게 되었고요. 아~ 정말 감사합니다. ^^

  12. 최신버전의 플래시플래이어의 보안쪽 설정이 근본적인 문제였군요..
    문C님 덕분에 저도 하나 알게 되네요.. 감사합니다.

  13. 정말 감사합니다^^
    따라하니까 되네요~

    정말 정말 감사합니다!!

  14. 으하~ 덕분에 며칠간 고민하던 부분이 해결되었네요. 앓던 이가 빠진 것 만큼 시원하네요. 고맙습니다. :)

  15. 잘 되신다니 다행입니다.

  16. 안녕하세요.집답게시판에서 같은 증상으로 검색해서 요래저래 링크 타고 왔어요.

    제가 완전 이쪽으로 잼병이라 꼼꼼히 읽어보고 따라해보려고 했는데

    말씀하신 php파일은 찾는데 까지는 성공했으나 php를 어떻게 편집하고 저장하는지를 모르겠어요.

    그리고 config.php가 어디있는지도 모르겠구요.

    도와주세요. 서비님.

  17. 테터툴즈나 텍스트큐브를 FTP로 올리시기 전에 압축 푼 폴더 바로 아래에 config.php 파일이 있습니다.
    메모장이나 워드프로세서 보다는 Edit plus나 Acroedit 같은 전문 편집기로 파일을 열어보시면 한결 보기 편하실 겁니다.

    제 글 앞에 복잡하게 쓴 방법 보다는 간단한 방법은,
    편집기로 config.php 파일을 열어보시면
    $service['flashuploader'] = true;
    라고 적혀 있는 부분을
    $service['flashuploader'] = false;
    로 바꿔 저장 하신 후 서버에 올리시면 될겁니다.

    잘 해결 되면 좋겠네요.
    사진에서 35mm님의 따듯한 시선이 느껴집니다. 잘 감상했습니다.

  18. 답변감사합니다.
    다른 친구가 이미 설치해준 블로그에 무지한 제가 살짝살짝 바꾸기만 하는거라 제가 넘겨받기 전에 상태로 설명을 들으니 잘 모르겠습니다.

    config.php 파일은 ftp://가장 상위 폴더에서 찾을수 있었는데 수정해야 할 부분은 없어보이구요 몇줄 짧게 내용이 들어있네요.

    죄송하게도 제가 너무 모르는거 같아요