inureyes 작성:
daybreaker 작성:

오호.. 요즘 Programming Language 시간에 하는 내용들이 나오는군요;; 저번 중간고사 범위가 lexical/syntatic analysis였다는...-_-;;

확실히, php 코드를 분석해서 그것이 악의적인 동작을 하는지 알아보는 건 불가능할 듯 싶습니다. 일종의 halting problem이려나요? ;

그걸 전부 parsing해서 검사하면 당연히 불가능하겠죠...

그렇지만 그냥 텍스트 안에 문제가 될 소지가 있는 명령어들이 포함되어 있는지의 체크는 굉장히 쉽지 않을까 합니다. smile

문제는 의도적으로 악의가 있는 경우입니다. 의도적이기 때문에 체크 루틴을 회피할 수 있는 방법을 사용한다는 것이지요.

daybreaker 작성:

오호.. 요즘 Programming Language 시간에 하는 내용들이 나오는군요;; 저번 중간고사 범위가 lexical/syntatic analysis였다는...-_-;;

확실히, php 코드를 분석해서 그것이 악의적인 동작을 하는지 알아보는 건 불가능할 듯 싶습니다. 일종의 halting problem이려나요? ;

PL 강의만으로 완전히 이해하는 것은 무리지요.
compiler를 들어보셔야 ㅎㅎ

inureyes 작성:

그렇군요 smile 이해했습니다. 인터프리터에서 해석하는 시간이 compile time이 아니라 문자열로 읽어들이는 것이 compile time이군요. php코드로써가 아니라 완전히 plain text로 읽어와도 compile time이 되는건가요?

C addictive people에게는 힘든 개념입니다. ㅠ_ㅠ

단순한 문자열이 아니라 PHP 코드로서 읽어들여 syntatic analysis를 하기 때문에 compile(parse)-time입니다.
syntactic analysis를 해서 AST를 얻어 interpret하면 run-time이 되겠지요.

참고로, 태터툴즈 배포판에 사용되는 optimizer는 syntactic analysis를 통해 compile(parse)-time에 optimizing합니다. 그래서 require와 require_once가 있을 때, 전자는 compile-time에 결정되어 optimizing할 수 있지만 후자는 그렇지 못합니다. 또한 최근에 inureyes님이 글편집 팝업창과 관련하여 commit한 코드 중에 다음은 compile-time에 optimzing할 것이 별로 없습니다.

require ROOT . (isset($_GET['popupEditor']) ? '/lib/piece/owner/contentMenu81.php' : '/lib/piece/owner/contentMenu70.php');

그래서 다음과 같이 수정한 것이지요.

if (isset($_GET['popupEditor']))
    require ROOT . '/lib/piece/owner/contentMenu81.php';
else
    require ROOT . '/lib/piece/owner/contentMenu70.php';
inureyes 작성:
PAPACHA 작성:

플러그인 manifest에 보안등급(?)을 구분할 수 있는 safety element가 있습니다.
PHP 언어 특성상 compile(parse)-time에 사용되는 함수나 명령을 판단하는 것은 불가능합니다.
...

compile time이 아니라 플러그인 사용여부를 체크할 때 index.php를 텍스트로 읽어와 해석하는 것은 가능하지 않나요?

index.php를 텍스트로 읽어 해석하는 것이 compile(parse)-time인데요,
악의적인 경우를 차단하는게 목적이기에 악의적으로 우회하지 못해야 하는데,
eval(), create_function(), call_user_func(), call_user_func_array() 이 사용되면 그렇게 하는게 불가능합니다. 이들을 사용하지 못하게 할 수 있겠지만...
또한 include 계열을 사용하면 역시 더 불가능해 집니다...

Kotoko 작성:
inureyes 작성:

플러그인의 보안등급을 직접 측정하는 부분을 플러그인 모듈 안에 추가해야 되지 않을까 싶습니다.

복잡하게 생각하면 복잡한데, 간단하게 생각하면 플러그인 내용 중에 SQL 쿼리가 존재하는지, 자바스크립트가 존재하는지 등등만 검사해서 표시하도록 해도 해결은 되지 않을까 싶습니다. 어떨까요?

플러그인이 "미사용" 에서 "사용"으로 전환될때 내부적으로 validate 하고, 그 결과에 대해서 사용자에게 경고를 해주는것도 좋을거같습니다.
예를 들자면..

사용하시려는 ***플러그인은 다음과 같은 이유로 위험할 수가 있습니다.
* 이 플러그인은 DB에 테이블을 생성합니다.
* 이 플러그인은 DB에 레코드를 수정합니다.

이를 무시하고 플러그인을 사용하시겠습니까?

처럼 말이지요.

플러그인 manifest에 보안등급(?)을 구분할 수 있는 safety element가 있습니다.
PHP 언어 특성상 compile(parse)-time에 사용되는 함수나 명령을 판단하는 것은 불가능합니다.
...

doax 작성:

변경되어야 하는 이벤트: AddPostEditorToolbox 이벤트는 도구막내를 사용하는 플러그인이 여러 개 있다면 여러 개가 등록되어야 하지만 현재는 하나만 등록됩니다. 그래서 도구 막대에 등록할 필요가 있는 플러그인 만큼 이벤트를 만들어서 사용하고 있습니다. 코드는 다음과 같습니다.

$view1=fireEvent('AddPostEditorToolbox1','');
$view2=fireEvent('AddPostEditorToolbox2','');
if(!empty($view1)||!empty($view2))
    echo '<div style="width:655px;">',$view1,$view2,'</div>';?>

플러그인에서 종속성 또는 우선 순위는 별도로 지원하지 않습니다.
즉 플러그인은 종속성과 우선 순위, 충돌에 자유로울 수 있도록 구현해야 합니다.
위와 같은 경우에 기본적으로 모든 AddPostEditorToolbox handler는 target을 concatenation해서 리턴해야 합니다.
예를 들어

function Plugin1_AddPostEditorToolbox($target) {
    return $target . '<input .../ >';
}

function Plugin2_AddPostEditorToolbox($target) {
    return $target . '<div.../ >';
}
徐하늘 a.k.a !Nazu NT 작성:

 샌드박스를 통해서 올리는 것은 아직 권한이 없을 듯 해서 이렇게 직접 링크합니다.

- http://nekoto.poporu.net/tt105b_plugins.zip

 일단 태터툴즈 4대 기본 플러그인의 XML 상의 일본어 지원을 걸어 두었습니다. 하지만 생일 표시의 PHP 부분은 한글 그대로 두었습니다. 이에 대해서 언어지원은 아직 이루어진 거 같지 않아서 말이지요.

수고하셨습니다.
베타3 기간에 반영하겠습니다.

차주에 출근해서 샌드박스 commit 권한을 받으실 수 있도록 처리하겠습니다.

83

(22 답글들, 공지사항에 작성)

마모루 작성:

checkup 권고 메세지가 '시스템을 점검'한다기에 윈도우즈가 맛간줄 알았습니다.
표현이 조금 바뀌면 좋겠네요.
'태터툴즈 DB의 checkup이 필요합니다' 정도로 말이죠..

ㅎㅎ
영어 단어가 너무 많이 들어갔어요~
한글로 바꿔주세요! smile

84

(22 답글들, 공지사항에 작성)

다운로드 URL은 http://dev.tattertools.com/attachment/w … format=raw 입니다.
많은 참여 부탁 드립니다. 감사합니다.

1.0.5 베타2로부터 변경 사항은
* 모든 외부 입력 문자열에 대한 UTF8 검사와 교정, MBCS(EUC-KR) 식별 및 변환이 적용됩니다.
    * 댓글이나 방명록, 트랙백에 비정상적 글자가 포함되어 null 에러창이 표시되거나 블로그 화면에 깨지는 현상을 해결하였습니다.
    * 이미 데이터베이스에 저장된 데이터에 대한 교정은 데이터 관리 화면의 교정 기능을 통해 교정하실 수 있습니다.
* UTF-8이 지원되지 않는 MySQL 4.0 이하에서 UTF-8이 비정상적으로 저장되어 null 에러창이 표시되거나 블로그 화면에 깨지는 현상을 해결하였습니다.
    * 이미 데이터베이스에 저장된 데이터에 대한 교정은 데이터 관리 화면의 교정 기능을 통해 교정하실 수 있습니다.
* 데이터 복원(마이그레이션)시에 백업(마이그레이션)파일을 교정하는 옵션이 추가되었습니다.
    * 비정상적인 글자가 백업파일에 포함되어 복원이 이루어지지 않을 경우에 이 옵션을 사용하십시오.
* 블로그 화면에서 팝업창으로 글 편집 지원 (contributed by inureyes)
    * 기본 Tattertools_skyline_ko 스킨을 참조하세요.
* 일본어 지원 (contributed by Louice P., !Nazu NT)
* "트랙백 추적" 플러그인 추가
    * 일반적인 스팸 트랙백을 차단합니다.
    * 일부 외국 블로그에서 보낸 정상적인 트랙백이 차단될 경우, 플러그인 소스에 예외 목록에 추가하여 해결할 수 있습니다.
* IP 필터링이 트랙백에도 적용됩니다.
* checkup 자동 권고 기능
    * 업그레이드 후에 처음으로 글관리 화면에 들어가면 checkup을 자동으로 권고하게 됩니다.
* 스팸 차단 플러그인 등을 위한 이벤트 추가
    * AddingComment
    * ModifyingComment
    * AddingTrackback
    * AddingRefererLog
    * ViewRSS
    * SaveFeedItem
* 리더를 포함한 여러 기능의 버그 수정

@베타 테스팅 전에 반드시 데이터를 백업하시는 센스~

날개달기 작성:

시간대를 '대한민국'으로 바꾸고 '저장하기' 버튼을 누르면 '저장되었습니다'라는 메시지는 나옵니다만, 다시 보면 '세계 표준 시간'으로 되어 있습니다.

checkup을 안 하셨더군요. 제가 해 드렸습니다. ^^
1.0.5 베타3부터 checkup 자동 권고 기능 추가되었습니다. smile

버그는 아니고요,
보안 문제로 인해 javascript 또는 event handler를 제거하도록 되어 있습니다.

베타 3가 오늘 밤 늦게 나올 것 같습니다.
utf-8에 대한 완벽한(?) 처리가 매우 복잡합니다.

우선 티켓 #67 자체에 한하여 진행되었으면 합니다. 모률화나 객체화로 확장하게 되면 버그 레벨이 너무 높아집니다.

daybreaker 작성:
chester 작성:

저 무식해서 죄송한데..  DB모듈화가 무엇입니까 ?? 흑 ~

현재는 MySQL query 문들이 코드 중간중간에 직접 들어가 있지요. mysql 입출력 함수만을 따로 모아서 클래스로 만든 다음, 현재의 query 문들을 모두 이걸로 대체하는 겁니다.

그러면 mysql 관련한 문제가 발생했을 때 그 클래스 하나만 수정하면 되니까 전체 코드를 다 건드려야 하는 일이 없어지고, 또한 mysql 뿐만이 아니라 postgresql, sqlite 등 다른 종류의 DBMS를 사용할 수 있도록 컨버팅하는 것도 매우 쉬워집니다.

하지만 거기까지 이르기 위해서는 정말 엄청나게 많이 뜯어고쳐야 할 겁니다. (특히 다중 backend를 지원한다면 설치 UI 쪽도 변경이 될 필요가 있지요)

mysql 입출력 함수만 따로 모으는 것은 큰 의미가 없습니다. model마다 특성과 check routine등이 상이하기 때문입니다. mysql 관련뿐만이 아니라 model로서 object화시키는 것이겠지요. 이에 대한 구현이 Tattertools.Data.* components입니다. 데이터 export/import 기능이 이 components를 사용합니다. 그러나 이 components가 구현되기 전에 지금의 lib/model/*이 구현되어 사용되었기에 추가되는 기능이 아닌 경우는 계속 lib/model/*을 사용하고 있습니다. 앞으로 점차적으로 이들 사용이 Tattertools.Data.* components의 사용으로 변경될 것입니다.
또한 단순히 mysql 입출력의 문제에 대해서는 Eolin.PHP.Core component에 포함된 DBQuery와 TableQuery classes를 확장해서 구현할 수도 있겠습니다.

1.0.5 Beta 2를 부탁 드립니다. smile

91

(1 답글들, 공지사항에 작성)

다운로드 URL은 http://dev.tattertools.com/attachment/w … format=raw 입니다.
많은 참여 부탁 드립니다. 감사합니다.


1.0.5 베타1에서의 변경 사항은

i18n 사소한 오류 수정
피드 저장 기간을 계속 보관으로 설정하면 피드를 저장하지 않는 문제 수정
stripHTML 함수 개선
리더에서 본문과 URL을 제외한 string에 stripHTML 적용
리더 - OPML Export 할때 불필요한 escape 제거
파일업로드 - 중복된 파일이 업로드되지 않게함.
글쓰기를 할 때 블로그 전체에서 사용하고 있는 용량이 표시됨
파일업로드 - 파일 사이즈 표시에서 에러
리더 관련 수정 사항
* 전체피드 갱신 후 피드 목록도 갱신
* i18n 수정
* 피드 접속 timeout 3초로 설정
* 일부 RDF 피드에서 link 못읽어오는 것 수정
* 피드 목록에 피드 제목, 설명 표시방법 변경
* 피드 목록 불러올 수 있는 갯수는 최대 400개
* 그룹, 피드 수정화면에 취소버튼 추가
* 피드 갱신이 자주 안되는 문제 수정
이미지 없이 TTGallery를 보여줄때 나는 오류 수정
upload progress bar와 attachment list 간에 폭을 일치
upload 완료 후 beforeunload 이벤트가 발생 차단
Mysql like search 되는 부분에 _, % 문자 escape 처리
이름이 같은 카테고리가 존재하는 경우 카테고리 수정 차단
firefox에서 업로더 실행시 firefox가 닫히지 않게 수정
Timezone::getAlternative method 관련 오타 수정 (contributed by Peris)
getCalendar function 정의 오타 수정 (contributed by Peris)
XMLHTTPRequest.send 사용 표준(?) 오류 (contributed by daybreaker)
새 글 작성시 미리보기가 안되던 버그 수정 (contributed by Peris)
XMLStruct::selectNodes method의 null reference return 오류 수정
getTimestamp3 function에 대한 backward-compatibility 지원 (contributed by Peris)
일부 PHP 환경에서 BOM이 포함된 XML 파일을 parsing하지 못하는 버그를 회피하도록 수정
언어(한국어, 영어) 리소스 보완 (contributed by Remengen)
(contributed by inureyes)

* 1.0.5 베타1의 리비젼은 official svn @58입니다.
* 1.0.5 베타2의 리비젼은 official svn @81입니다.

태터툴즈의 PHP 소스 코드는 모두 UTF-8 인코딩입니다. BOM이 없는 이유는 inureyes님이 말씀하신 것처럼 많은 PHP환경에서 BOM이 있는 경우를 처리하지 못하기 때문입니다.
위지윅/텍스트 모드 부분은 1.0.6으로 이월되었으며 그 이유는 http://www.tattertools.com/ko/forum/vie … php?id=189 과 같습니다.

93

(11 답글들, 스킨 및 플러그인에 작성)

이 부분은 아직 결정해야 할 사항이 있는 것 같아 1.0.6에서 지원하는 것으로 하겠습니다.
이 thread에서 구현 사항이 결정되면 티켓팅하여 처리하겠습니다.
계속 논의해 주십시오.

94

(11 답글들, 스킨 및 플러그인에 작성)

카테고리별이나 페이지 및 글 특성별로 여러 스킨을 제공하는 것에 대해서는 생각하고 연구(?)하고 있습니다. 이는 태터툴즈 1.0 공개 이전부터 생각해오던 사항이며 제공될 것입니다.

body id 처리를 추가하는 것에 대해 매우 긍정적으로 생각합니다.
inureyes님의 sandbox 구현을 보면 $list['title']을 사용하셨는데요, 위에서 말씀하신 사항을 보자면 $suri['directive']로 하는 것이 좋지 않을까하고 생각하고 있습니다.
그리고 제가 CSS에 능숙하지 않아서 그러는데요, 일반적으로 element id attribute를 사용하는데 white-space나 특수문자, 한글이 사용 가능한지 확인해 주십시오.
의견 주십시오.

95

(1 답글들, 공지사항에 작성)

http://dev.tattertools.com/attachment/w … .beta1.zip 을 방문하세요!
다운로드 URL은 http://dev.tattertools.com/attachment/w … format=raw 입니다.

베타 테스팅 기간은 5월 1일 오후 3시까지입니다.

버그 리포팅시에 베타 자체 (1.0.4에서 1.0.5로 변경된 부분)와 그렇지 않은 부분을 구분하여 주시기 바랍니다.
(dev.tattertools.com의 reporter분들은 티켓 등록시에 Release라고 하는 항목에 이를 명시해 주시면 됩니다. 예: 1.0.5.beta1)
많은 참여와 버그 리포팅 부탁 드립니다.

감사합니다.

96

(2 답글들, 지역화및 문서화 작업에 작성)

작업하시기 편하시도록 깔끔하게 정리하였습니다.
오늘 1.0.5 베타가 릴리즈되고 베타 테스팅 기간동안 영어 리소스를 보완하고자 합니다.
많은 참여 부탁 드립니다.

구현 방법을 조금 변경해서 official svn에 commit하였습니다.
http://dev.tattertools.com/changeset/47

@ 12 revisions를 반영하느라 시간 좀 걸렸습니다...

수고하셨습니다!
어떻게 해결하실 지 조용히 지켜 보고 있었는데요, ^^;
매우 좋은 방향으로 해결하셨다고 생각합니다 smile

99

(3 답글들, 잡담하기에 작성)

chester 작성:
JWC 작성:

ㅎㅎ 그러게요.. 아마도 힘들듯 싶죠?

글쎄요 ?
정해진 일정보다 하루 늦습니다만, 현재 1.0.5 작업이 열혈 진행중에 있습니다..
eolin 안정화쪽에 저희가 시간을 틈틈히 쏟고 있습니다용 !!
파파차님께 여쭈어보도록 하겠습니다.

지금 마이스톤 1.0.5 티켓과 source codes의 정리 작업을 진행하고 있습니다.
예정된 오후 3시보다는 늦어질 것 같습니다만, 오늘 중으로 1.0.5 베타를 릴리즈를 할 것입니다.
@배포 준비는 너무 힘들어요...  T.T

crizin 작성:

http://img161.imageshack.us/img161/2451/crizinxyanbluecom042610434zz.gif

불멸의 링크!!