New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
wr_num
필드 값이 동시성 문제로 겹치는 경우 답변글에 대한 권한이 잘못 주어지는 등의 문제
#265
Comments
안녕하세요. SIR 입니다. 의견 주셔서 감사합니다. |
@thisgun 이게 기준 값이 바뀌어버리는 셈인데 문제가 발생할 수 있습니다.
근데 이런 것들이 마찬가지로 3개의 글이 순서대로 작성한 상태 (정렬은 wr_num ASC)
wr_id=1 글을 끌어올리기 (가장 작은 wr_num(-3)에서 1을 뺀 값(-4)으로 지정)
새로운 글을 작성하면 wr_id=4로 글이 작성됨
이와 같이 wr_num이 겹치는 문제가 발생합니다. 이런 문제로 일명 "끌올" 기능을 활용하는 사이트에서는 이 문제는 기존과 같이 diff --git forkSrcPrefix/bbs/write_update.php forkDstPrefix/bbs/write_update.php
index d6d47647af35ec6f6a7f830fa5a711bb49b4c70d..6edd6fc69cffdb0bc1aee911448c476d1cf5d7a5 100644
--- forkSrcPrefix/bbs/write_update.php
+++ forkDstPrefix/bbs/write_update.php
@@ -259,7 +259,7 @@ if ($w == '' || $w == 'r') {
}
$sql = " insert into $write_table
- set wr_num = '$wr_num',
+ set wr_num = (select min(wr_num) - 1 from $write_table sq),
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name', 물론 이번에 추가된 코드 제가 이 이슈에서 현재는 원본글과 마찬가지로 답글 또한 |
이슈 내용을 나름대로 열심히 적었다고는 하지만 윗 댓글처럼 설명하지 못한 부분이나 부족한 부분이 있을 수 있습니다. 내 이슈가 해결이 되었는지 확인하고 이슈 내용이 제대로 전달되었는지 이슈 제출자 스스로도 판단할 시간이 필요합니다. 배포 전에 이슈나 코드에 대해 상호 점검할 시간이 주어졌으면 합니다. |
안녕하세요. SIR 입니다. 코드를 제공해 주셔서 정말 감사합니다. 알려주신 코드를 참고하여 코드를 수정했습니다. |
글, 답변글을 작성할 때
get_next_num()
함수로wr_num
필드의 값을 가져와 사용하는 과정에서 동시 또는 지연 등의 문제로 이 값이 같은 값이 사용될 수 있음.gnuboard5/lib/common.lib.php
Lines 792 to 800 in 6416560
문제 및 사례
이 원인으로 다음과 같은 문제가 발생할 수 있음
wr_num
으로 잘못된 그룹이 지어져 게시물 정렬에 문제가 발생할 수 있음wr_num
을 임의로 넣은 값이지만 중복이 발생할 때 같은 현상이 나타날 수 있음gnuboard5/bbs/delete.php
Lines 44 to 52 in 6416560
gnuboard5/bbs/board.php
Lines 84 to 96 in 6416560
wr_num
에 의존하여 그룹을 만들어 글, 답글, 댓글에 대한 권한, 컨텐츠 변경 및 이동 등 연관지어 동작하는 코드에서 쉽게 발견되지 않는 알려지지 않는 문제가 발생할 수 있음해결 방안
wr_num
을 채워넣기위해get_next_num()
함수를 사용해 데이터를 가져오는 과정에서 예상보다 긴 지연이 발생할 경우 많은 문제를 일으킬 수 있으므로 이 함수를 사용하는 대신 서브쿼리 등으로 글 데이터를 insert 할 때 바로 참조하는 방법으로 조금이나마 개선이 가능할 것으로 보입니다.이 문제의 완전한 해결책은 아니지만 현재의 호환성을 유지하면서 개선이 가능한 방법이 될 것 같습니다.
대부분 '원글'을 잘못 찾는 문제이므로 댓글(comment)처럼 답글의
wr_parent
에 원글의wr_id
를 넣고 원글을 찾는데 활용하는 것으로 해결이 가능할 것으로 보임.다만,
wr_parent
가 댓글과의 연관 관계를 가지는데 사용된다면 답글의 댓글에 영향을 줄 수 있음. 정돈되지 않은 코드, 존재하지 않는 개발자 매뉴얼, 커밋 메시지와 코드 변경이력이 추적을 어렵게 하기 때문에 사실상 로직 분석이 불가하여 개발팀에서 해결 방안을 찾아야 할 것 같습니다.The text was updated successfully, but these errors were encountered: