그누보드 비밀글 패스워드 지정 스킨의 여분필드(wr1) 활용 원리
페이지 정보

본문
그누보드에서 비밀글 작성 시 회원 비밀번호 대신 별도의 패스워드를 지정하고 싶을 때, 여분필드(wr_1)를 활용해 비밀번호를 제어하는 내부 동작 방식과 적용 원리를 설명합니다.
비밀글 패스워드 검증 원리
그누보드에서 비밀글의 비밀번호 검증은 스킨 파일(view.skin.php)이 아닌 그누보드 코어 파일(bbs/password_check.php)에서 처리합니다. 따라서 스킨 파일 내에 별도의 체크 코드가 없더라도 그누보드 코어의 로직에 의해 정상적으로 동작합니다.
비밀번호 검증 로직
- 기본 동작: 그누보드는 게시글을 읽을 때 DB의
wr_password필드에 저장된 값과 사용자가 입력한 비밀번호를check_password()함수를 통해 비교합니다. - 회원 작성 시: 로그인한 회원이 비밀글을 작성하면, 그누보드 코어는 회원 비밀번호를
wr_password필드에 자동으로 저장합니다. 이 때문에 별도의 입력 없이도 회원 비밀번호로 검증이 이루어집니다.
여분필드(wr_1)를 활용한 패스워드 지정 원리
비밀글 패스워드 지정 스킨은 회원 비밀번호 대신 사용자가 지정한 별도의 비밀번호를 사용하기 위해 다음과 같은 방식을 사용합니다.
- 값 저장:
write_update.skin.php파일에서 사용자가 여분필드(wr_1)에 입력한 비밀번호를 암호화합니다. - 필드 덮어쓰기: 암호화된 값을
wr_password필드에 강제로 업데이트합니다. 이렇게 하면 코어는wr_password에 저장된 이 암호화된 값을 기준으로 비밀번호를 검증하게 됩니다. - 결과: 시스템은
wr_1에 입력된 값을 비밀번호로 인식하게 되며, 글을 읽을 때 코어의password_check.php가 이를 정상적으로 검증합니다.
주의사항
- 비밀글 설정 필수: 이 방식은 게시판의 비밀글 기능을 활용하는 것이므로, 반드시 해당 게시판 설정에서 비밀글 기능을 활성화해야 합니다.
- 데이터 저장: 여분필드 값은 암호화된 상태로
wr_password필드에 저장되므로, DB 확인 시 원문 비밀번호가 아닌 해시값으로 저장되어 있음을 인지해야 합니다.
여분필드(wr_1)를 활용한 비밀글 비밀번호 연동 원리
그누보드에서 비밀글의 비밀번호는 기본적으로 wr_password 필드에 저장된 값을 기준으로 검증합니다. 로그인한 회원이 비밀글을 작성할 경우, 시스템이 자동으로 회원 비밀번호를 wr_password에 저장하기 때문에 별도의 비밀번호 설정이 어렵습니다. 이를 해결하기 위해 여분필드(wr_1)를 활용하여 wr_password 값을 강제로 덮어쓰는 방식을 사용합니다.
구현 및 동작 원리
- 데이터 처리 위치: 게시글 작성 및 수정 시 실행되는
write_update.skin.php파일에서 처리합니다. - 암호화 및 업데이트: 사용자가
wr_1필드에 입력한 비밀번호를 그누보드 암호화 함수인get_encrypt_string()을 사용하여 암호화한 뒤, 해당 게시물의wr_password필드 값을 업데이트합니다.
코드 적용 예시
write_update.skin.php 파일에 아래와 같은 로직을 추가하여 구현합니다.
<?php
// 로그인한 회원인 경우에만 wr_1 값을 비밀번호로 설정
if ($member['mb_id'] && $_POST['wr_1']) {
$wr_password = get_encrypt_string($_POST['wr_1']);
sql_query("UPDATE {$write_table} SET wr_password = '{$wr_password}' WHERE wr_id = '{$wr_id}'");
}
?>
핵심 참고 사항
- 검증 로직:
view.skin.php에 별도의 체크 코드가 없어도 되는 이유는 그누보드 코어(bbs/password_check.php)가 이미wr_password필드에 저장된 값을 기준으로 비밀번호를 검증하기 때문입니다. 여분필드를 통해 이 값을 변경하면 자연스럽게 해당 게시물의 비밀번호가 변경됩니다. - 주의사항:
wr_1에 값을 입력하지 않으면 그누보드 기본 설정대로 처리됩니다. 관리자 전용으로 제한하고 싶다면$member['mb_id']조건을$is_admin으로 변경하여 적용하십시오.
비밀글 패스워드 지정 스킨 적용 시 주의사항
그누보드에서 비밀글 패스워드 지정 스킨을 적용할 때는 그누보드의 기본 비밀글 처리 로직과 커스텀 스킨의 동작 방식을 명확히 구분해야 합니다.
1. 게시판 설정 확인
비밀글 기능을 사용하려면 관리자 페이지의 게시판 관리에서 해당 게시판의 비밀글 사용 설정을 반드시 활성화해야 합니다. 이 설정이 되어 있지 않으면 스킨에서 비밀글 옵션을 제공하더라도 시스템상 비밀글로 등록되지 않거나 오류가 발생할 수 있습니다.
2. 회원 로그인 환경과의 차이
그누보드 코어는 회원이 로그인한 상태에서 비밀글을 작성하면, 별도의 비밀번호 입력 없이 회원 가입 시 설정한 비밀번호를 wr_password 필드에 자동으로 저장합니다.
- 주의: 커스텀 스킨을 통해 여분필드(
wr_1)로 비밀번호를 지정하는 방식은 주로 비회원이나 관리자가 임의의 비밀번호를 설정할 때 유효합니다. 회원 로그인 상태에서 스킨 로직이 강제로wr_password를 덮어쓰도록 구현되어 있는지 확인해야 합니다.
3. 비밀번호 검증 로직의 이해
view.skin.php 파일 내에 비밀번호 체크 코드가 보이지 않는 것은 정상입니다. 그누보드는 글을 읽을 때 코어 파일인 bbs/password_check.php를 통해 DB에 저장된 wr_password 값을 기준으로 비밀번호를 검증합니다. 따라서 스킨의 write_update.skin.php 등에서 여분필드(wr_1)에 입력된 값을 암호화하여 wr_password 필드에 정확히 업데이트하는 과정이 핵심입니다.
4. 보안 및 데이터 주의사항
- 암호화 저장: 여분필드에 입력된 비밀번호는 반드시
get_encrypt_string()함수 등을 사용하여 암호화한 후wr_password에 저장해야 합니다. 평문으로 저장할 경우 보안상 매우 취약합니다. - 검색 취약점: 그누보드 5.2.8 버전 미만에서는
wr_password컬럼이 검색 대상이 될 수 있는 취약점이 존재하므로, 최신 버전의 그누보드를 사용하는 것이 권장됩니다. - 비회원 환경: 비회원이 비밀글을 열람할 때는 리스트에서 클릭 시 팝업 등을 통해 비밀번호를 입력받는 로직이 스킨에 포함되어 있어야 합니다. 읽기 권한이 1인 경우에만 작동하는 등 스킨마다 설정 기준이 다를 수 있으므로 해당 스킨의 가이드를 확인하십시오.
상황별 판단 및 행동 가이드
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 비밀글 스킨에서 비밀번호 체크 코드를 찾을 수 없음 | 코어 로직(bbs/passwordcheck.php)이 wrpassword를 기준으로 검증함을 인지 | 스킨 파일이 아닌 DB의 wr_password 필드값 확인 |
| 회원 로그인 시 회원 비밀번호가 아닌 별도 비밀번호를 쓰고 싶음 | 여분필드(wr1)를 활용해 wrpassword를 덮어쓰는 방식 선택 | writeupdate.skin.php에서 getencrypt_string()으로 암호화 후 DB 업데이트 |
| 비밀글 기능이 정상적으로 작동하지 않음 | 게시판 설정에서 '비밀글 사용' 활성화 여부 확인 | 관리자 페이지 게시판 설정에서 비밀글 옵션 체크 |
| DB에 저장된 비밀번호가 평문이 아님 | 그누보드 암호화 방식(getencryptstring)에 의한 정상 동작임을 확인 | 암호화된 해시값을 그대로 유지하며 로직 수정 지양 |
실전 FAQ
Q. view.skin.php에 비밀번호 체크 코드가 없는데 어떻게 동작하나요?
그누보드는 게시글 열람 시 스킨 파일이 아닌 코어 파일(bbs/password_check.php)에서 wr_password 필드 값을 불러와 check_password() 함수로 검증합니다. 따라서 스킨에 코드가 없어도 정상적으로 동작합니다.
Q. 여분필드(wr_1)를 활용해 비밀번호를 변경하는 원리는 무엇인가요?
write_update.skin.php에서 사용자가 입력한 wr_1 값을 get_encrypt_string() 함수로 암호화한 뒤, 해당 게시물의 wr_password 필드 값을 강제로 업데이트합니다. 코어는 변경된 wr_password 값을 기준으로 비밀번호를 검증하게 됩니다.
Q. 비회원도 여분필드 비밀번호를 사용할 수 있나요?
기본적인 스킨 예제는 회원/관리자 중심이나, 비회원 환경에서도 write_update.skin.php에서 wr_1 값을 받아 wr_password를 업데이트하도록 로직을 구성하면 가능합니다. 단, 비회원 열람 시 비밀번호 입력 팝업을 호출하는 스킨 내 로직이 선행되어야 합니다.
Q. 적용 시 주의해야 할 막히는 지점은 무엇인가요?
반드시 게시판 관리 설정에서 '비밀글 사용'이 활성화되어 있어야 합니다. 또한, wr_password 필드는 검색 취약점과 관련이 있으므로, 그누보드 최신 버전을 유지하고 직접적인 SQL 쿼리 작성 시 보안에 유의해야 합니다.
함께 보면 좋은 글
- 그누보드 여분필드 체크박스 다중 활용 시 빈 값 및 구분자 출력 문제 해결
- 그누보드 회원가입 스킨 여분필드 선택값으로 레벨 자동 부여 방법
- 그누보드 게시판 댓글 작성 및 수정 페이지에 여분필드 적용하는 방법
참고자료
기타 참고자료
- 다음글프리픽 9주년 프리미엄 1년 결제 세일 및 정기 결제 주의사항 26.10.26
댓글목록
등록된 댓글이 없습니다.