글쓰기 하단에 있는 임시저장 & 불러오기로 글을 등록하면, 임시저장한 시간대로 글이 올라갑니다.

 

스크린샷 2024-03-17 015623.png

 

저 불러오기를 누르면

 

스크린샷 2024-03-17 020106.png

 

이렇게 임시 저장한 글을 고를 수 있고, 선택을 누르면 임시저장글을 수정하거나 등록할 수 있는 구조 입니다.

 

이렇게 임시 저장글을 등록하면 최신 글로 등록되야 하는데 임시저장을 한 시점 (예를들어 열흘전인 3.07) 에 {n} 방금 << 이런식으로 글이 등록 됩니다.

 

 

KakaoTalk_20240317_015408149.jpg

 

7시간 전에 글을 임시저장하고 글을 등록 시키면 7시간 전 위치에 글이 뜹니다.

 

제 사이트 문제라기엔 실험용 게시판은 정상적으로 작동이 됩니다.

 

혹시나 스킨, 에드온, 모듈 문제인가 싶어 동일한 환경을 만들어도 여전히 실험용 게시판은 작동이 잘되고 (임시저장후 글을 등록하면 최신 글로 뜹니다.) 정작 중요한 기존의 다른 게시판은 여전합니다.

 

문서 정렬은 문서 순서 오름차순 다 동일합니다. 실험용 게시판은 잘 작동하는걸 보면, 기존 게시판 srl 이 바뀌어서 인지 설정때문인지 모르겠습니다.

 

module-document-tpi-saved list.html 의 코드를 보면

 

스크린샷 2024-03-17 021302.png

 

 

고 write_form.html 에 있는 불러오기 코드는

 

 

스크린샷 2024-03-17 021513.png

 

 

이렇는데 srl 관련 부분도 안보이네요.

 

 

어느부분과 관련있을까요?

 

스킨 설정 이런부분은 모두 동일합니다.

 

대체 왜 실험용 게시판은 정상적으로 작동하는데 기존 게시판만 저럴까요... 고칠려면 어디를 봐야할까요?

 

 

저 saved list 에서 선택을 누르면 문서번호 리셋되는 그런코드 넣으면될까요?

  • Lv36

    같은 사이트인데 게시판 하나만 정렬 순서가 달라진다는 뜻인가요?

    아니면 서로 다른 사이트인가요? (만약 다른 사이트라면 라이믹스 버전이 서로 다른가요?)

     

    1. 정렬되는 순서가 list_order가 아니거나

    2. 임시저장되었던 글을 정식 등록할 때 list_order를 끌어올려 주는 코드가 고장났거나

     

    두 가지 가능성이 있는데, 1번은 디버그 패널을 켜보면 게시판에서 실제 사용하는 쿼리를 확인할 수 있고, 2번은 정식 등록 전후에 DB의 값을 비교해 보아야 알 수 있습니다.

     

    만약 1번 상황이라면 게시판 목록을 다른 조건으로 변경하는 서드파티 자료 때문일 가능성이 높고, 2번 상황이라면 버전에 따른 차이이거나, 특정한 조건에서 일어나는 코어의 버그일 수도 있습니다. 혹시 문제가 일어나는 게시판에서만 동작하는 애드온이 있거나, 글쓴이의 권한(관리자, 일반 회원, 비회원)에 따라 증상이 달라지나요?

  • Lv36 ? Lv2

    서로 다른 사이트이며 라이믹스 버전은 2 버전으로 큰차이가 없습니다. 또한 목록 정렬은 문서번호 - 오름차순입니다.
    최고 관리자 권한이 있는 계정은 정상적으로 글이 등록되는데, 일반 회원은 임시저장 된 시점으로 글이 올라갑니다.

  • ? Lv2 Lv36
    세부 버전에 차이가 있다면 중요한 정보입니다. 관리자 권한 여부에 따라 동작이 달라진다면 어딘가 보안정책에 의해 list_order 끌올이 막히고 있을 가능성이 있는데요, 라이믹스 2.1.5에서 list_order 위변조 취약점이 패치되었거든요. 혹시 두 사이트 중 한쪽은 2.1.5 이상이고 한쪽은 2.1.5 미만인가요?
  • Lv36 ? Lv2
    이상이 없는 정상동작은 2.1.2 이고, 이상현상이 있는곳은 2.1.10 입니다.
  • Lv36 ? Lv8

    2.1.13 에도 있는 버그네요
    제가 github 를 안 좋아해서 ( 사실 못 다뤄서 ) 그냥 여기 써두겠습니다 ^^

    임시저장글을 불러와 저장하는건, updateDocument 로 가는데
    관리자가 아니면 regdate, last_update, list_order 변수를 없애버리다보니
    임시글에 대해 procBoardInsertDocument 에서 새로 부여한 list_order 값이 updateDocument  에서 사라져서
    임시글을 불러와 저장할때 list_order 값이 갱신이 안 되네요
    ( 그런데 등록일은 갱신되는건, updateDocument 함수 끝부분에 임시글인 경우 등록일만 다시 또 갱신하거든요 ^^)

    2.1.13 기준으로 document.controller.php 에서
    1000번째줄의 if(!$grant->manager) 부분을
    if(!$grant->manager && ($source_obj->get('status') != $this->getConfigStatus('temp')))

    이렇게 바꿔서, 임시글을 불러와 등록하는 경우는
    regdate, last_update, list_order 가 초기화되지 않게 하면 되네요

  • ? Lv2 Lv36

    확인 감사합니다. 패치해야겠네요.

  • ? Lv8 Lv36

    그 조건문을 풀어주면 임시저장글을 정식 등록하는 시점에 list_order 값을 조작해서 최상단에 영구적으로 고정시켜 버리거나, 스팸글을 관리자가 눈치채지 못하도록 아래에 숨기는 등 꼼수를 부릴 수 있게 됩니다. 그걸 막으려고 보안패치를 한 거고요.

     

    list_order를 갱신하는 로직을 board 모듈에서 document 모듈로 옮기거나, 트리거를 사용해서 값을 세팅해 줘야겠네요.

  • Lv36 ? Lv8
    그런데 이 list_order 라는 값이
    임의로 넣어도, procBoardInsertDocument 에 임시글인 경우 자체적으로 변수값을 다시 만든뒤
    그 값을 updateDocument 에 변수로 보내서 사용하는거니까 영향을 안 받지 않나요?
  • ? Lv8 Lv36

    코드를 자세히 보니 그럴 것 같기도 한데, 정확하게 이 케이스만 잡아내려면 regdate, last_update 등 (정렬에 흔히 사용되는) 다른 컬럼들은 별도로 방어해야겠지요. board 모듈만 믿기에는 이래저래 안심이 안 됩니다. 문서를 board 모듈에서만 사용하는 것도 아니고요.

  • Lv36 ? Lv8
    그런데 저 예외로 허용해주는 경우가.. 임시글에서만 예외처리하게 추가조건을 달아둔거여서
    어차피 임시글을 board 모듈에서만 쓰지 않나요? ( 물론 쓰려고 하면 다른 모듈에서도 쓸수는 있겠지만 ^^)

    그냥 무조건 풀어주는게 아니라, 임시글 인 경우에만 제한적으로 푸는거니
    외부 영향 받을 일이 거의 없을듯 싶어서요
  • ? Lv8 Lv36
    ...라고 생각하면 꼭 누군가가 허점을 찾아내더군요. ㅎㅎ
    공통으로 쓰는 부분(updateDocument)에서 막는 것이 가장 깔끔합니다.
  • Lv36 ? Lv2
    그러면 저부분에서 뭔가 추가할게 있을까요? 그냥 놔둬도되나요?
  • ? Lv2 Lv36
    일단 위에 세진님께서 알려주신 것처럼 땜빵해서 사용해 보시고요, 조만간 2.1.14가 나오면 땜빵 취소하고 정식으로 업데이트하시면 됩니다.
  • Lv36 ? Lv2
    제가 코어 수정을 했어서 라이믹스 업뎃 계획이 없어서 고민되네요.
  • ? Lv2 Lv36

    changed 파일을 다운받아서 적용하거나, 깃허브에서 수정 내역을 확인하시면 됩니다. 최근에 꽤 굵직한 보안패치가 몇 가지 있었으니, 안전을 위해서라도 최소한 changed 파일은 적용하시는 것이 좋습니다.

  • Lv36 ? Lv2
    네 알겠습니다 감사합니다
  • ? Lv1
    정렬 기준을 문서 번호가 아닌 등록일로 해보세요.
  • ? Lv1 ? Lv2
    네 등록일로 하면 정상동작하는걸 알지만 등록일로 하면 여러 단점이ㅣ 있다길래 문서번호로 합니다.
  • Lv36

    패치했습니다. https://github.com/rhymix/rhymix/commit/7c8e76b727

    이렇게 수정하고 정상 작동하는지 확인해 보세요.^^

  • Lv36 ? Lv2

    기진님. 임시저장'된' 시점으로 글이 올라갑니다.(스샷처럼) 적용한 부분은 다시 원복시켰습니다.

  • Lv36 ? Lv2

    스크린샷 2024-03-24 150330.png

     

    1분전에 올린 임시저장글인데, 임시저장된 시점으로 올라가네요