포럼
[Core] module action에 standalone 속성의 역할 재부여
2013.12.28 16:45
module.xml에 정의하는 module action에 활용되지 않았던 속성인 standalone의 역할을 다시 부여하려고 합니다. 활용되지 않던 속성이라 최근 코드에서 관련 흔적들을 모두 제거를 했는데 이를 다시 복원했습니다.
비정상적으로 액션을 호출하는 것을 제한하기 위한 조치이며 XE Core 1.7.4 버전에 적용 할 예정입니다.
예를 들어 다음과 같은 액션은 제한되어야 합니다.
mid=freeboard&act=procMemberDelete
처럼 (freeboard가 board모듈일 때) board 모듈의 액션이 아닌 엉뚱한 액션의 요청과 실행을 방지하기 위함입니다.
기능에 따라 standalone 속성을 부여해야하는 액션의 예를 들자면 mid=freeboard&act=dispMemberInfo
… 즉, 회원정보를 보여주는 action인 dispMemberInfo
는 member 모듈이 스스로 mid를 가지지 않기 때문에 standalone 속성을 부여하여 (레이아웃 설정 등을 mid=freeboard 에서 가져오되) 독립적으로 실행할 수 있어야 합니다.
앞의 예처럼 standalone속성을 부여해야만 하는 action은 많지 않을 것 같습니다. member, rss, trackback 처럼 다른 모듈의 mid에 의존하거나 mid와 상관없이 요청된 동작을 항상 독립적으로 실행할 수 있어야 하는 action에만 부여하면 됩니다. 단, procBoardAdminDelete
처럼 관리페이지 및 최고관리자의 요청만을 처리하는 액션은 제한하지 않도록 했습니다.
standalone 브랜치에서 진행 중이며 모듈 개발을 하시는 분들은 이 브랜치를 적용하여 동작을 테스트 해보실 수 있습니다. 예상하기로 mid를 가지는 모듈은 대부분의 액션은 정상 수행될 것으로 보입니다.
XE Core 등 직접 관리 및 배포하는 것들은 점검하여 동작에 문제가 없도록 처리 중에 있습니다.
이 변경으로 인해 발견된 문제는 댓글이나 https://github.com/xpressengine/xe-core/issues/226 에 남겨주시면 감사하겠습니다.
- [2019/10/22] Blog [보안패치] XE 1.11.6 버전 배포 안내 *2
- [2019/04/02] Blog [보안패치] XE 1.11.5 버전 배포 안내 *6
- [2019/03/26] Blog [보안패치] XE 1.11.4 버전 배포 안내
- [2019/03/25] Blog [보안패치] XE 1.11.3 버전 배포 안내 *2
- [2018/12/18] Blog [보안패치] XE 1.11.2 버전 배포 안내 *1
댓글 6
-
라르게덴
2013.12.28 21:56
-
콩치
2013.12.28 23:24
기존 메뉴얼에 적힌대로 standalone의 기능이 복원되는 것이 맞습니다. ^^
standalone과 action forward는 약간 차이가 있는데
rss, trackback 같은 action forward는 액션명으로 해당 모듈과 타입을 찾아낼 수 없을 때 사용됩니다.
dispMemberInfo처럼 액션이름에서 모듈(member)과 타입(view)을 찾아낼 수 있을 때는 굳이 action forward에 등록할 필요 없이 standalone으로 지정해주면 됩니다.
두가지가 기능적으로 중복되지는 않을것 같습니다.
standalone의 지정은 생략가능하고, 생략시 기본값은 false로 지정되게 될 것입니다.
-
라르게덴
2013.12.28 23:53
음.. 제가 잘못이해한건가요,
action forward의 원래 기능은 호출되는 act명(rss, atom)이 해당 모듈(board)의 module.xml에 존재하지 않을때 그 다음 프로세스로 xe_action_forward에서 검색해서 호출해주는걸로 알고 있는데 말이죠. 그러니까 p486에도 standalone == true 비교를 해야 의미적으로 완벽한 처리가 될거 같다는 말인거죠.
그리고 standalone 생략시라는게 결국 비선언 action은 모두 false를 files/cache/module_info에 선언되게 되는데 이 용량이 상당히 큽니다. 이걸 또 메모리에 불러와서 처리하자나요. 의미가 있는건가요? 그래도 담아둘 필요가 있는거라면 오히려 module.xml에 분명히 standalone = false를 사용하는게 더 의미가 좋아보입니다만...
-
콩치
2013.12.31 10:06
action forward와 standalone의 쓰임새 차이를 살펴보면,standalone은 mid가 필요없는 모듈의 static 메소드에 해당되는 액션이라고 할 수 있습니다. 예를 들어 dispMemberInfo는 mid를 필요로하지 않습니다. standalone=false인 액션이 다른 모듈의 mid와 함께 요청된다면 잘못된 접근입니다. standalone=true인 액션은 다른 mid와 함께 요청될 수 있지만 mid를 딱히 사용하지는 않습니다.반면에 action forward는 타모듈의 인스턴스(mid)를 필요로하는 액션입니다. rss는 타겟이 되는 mid를 필요로 합니다. (물론 사이트 전체글을 rss로 제공할 때는 필요없습니다.)standalone=false를 캐시에 저장할지 안할지는 용량상 성능상 그리 큰 문제는 아닐것 같습니다.근데 p486은 뭔가요?? -
라르게덴
2013.12.31 10:11
아 p486은 모듈헨들러.php의 페이지줄번호에요. -
쿡래빗
2014.01.01 18:01
오...다시 적용되는구나..
미리 개발 내용을 정리해주시고 알려주셔서 고맙네요 :)
개발매뉴얼 중..
standalone
위 브랜치의 기능은 기존 매뉴얼에 적혀있는 본연의 기능을 실제 동작하도록 구현(복원) 하시겠다는 이야기로 생각하면 되나요? 그렇다면 진행하는데에 있어 특별히 문제될 부분은 없어보이네요.
다만, 현재 xe_action_forward에 선언되어있는 rss, atom 등은 해당 룰에 영향받지 않는거 같은데 앞으로 action_forward와 기능적으로 중복되진 않는지, 기존 action_forward에 선언된 서드파티 act에는 영향이 없는지 궁금하군요.
추가로,
원래 기능으로 복원하면 standalone이 선언 안되어있는 모든 action은 standalone=false로 저장하는데 불필요한 쓰임새 같습니다. 이 부분은 보안해서 true만 cache에 저장하고 false는 선언했다면 저장하고 아무선언이 없다면 프로그램처리로 대체하는게 좋을 것 같습니다.
<action>에 들어가는 grant도 역할이 없던데 요건 제거해도 될거 같군요.