wr_password 와 mb_password 필드를 varchar 를 BLOB 로 변경하기 > 그누보드5 팁자료실

그누보드5 팁자료실

wr_password 와 mb_password 필드를 varchar 를 BLOB 로 변경하기 정보

wr_password 와 mb_password 필드를 varchar 를 BLOB 로 변경하기

본문

새로 세팅해서 테스트 한것이 아니므로 적용에 주의가 필요합니다.

 

 

고객사의 요청으로 유지보수를 진행하기 위해 디비를 살펴보니
그누보드의 회원 테이블의 비밀번호 필드가 varchar(255) 가 아닌 BLOB 이더군요



비밀번호 저장 방식도
$mb_password = '".sql_password($mb_password)."',   도
$mb_password = '".get_encrypt_string($mb_password)."',  도 아닌
$mb_password = UNHEX('".get_encrypt_string($mb_password)."'),   를 사용하네요

UNHEX 를 찾아보니 MySQL 5.6 부터 도입된 내용인가 보네요
https://www.w3resource.com/mysql/string-functions/mysql-unhex-function.php

blob 필드의 값을 회원가입과 로그인에서 어떻게 처리하는지 살펴보겠습니다.
설치하기전에 install 의 sql 파일의 필드 속성을 변경합니다.


1. install / gnuboard5.sql
  `mb_password` varchar(255) NOT NULL default '',
를 아래와 같이 변경
  `mb_password` blob NOT NULL default '',


2. adm / sql_write.sql
  `wr_password` varchar(255) NOT NULL,
를 아래와 같이 변경
  `wr_password` blob NOT NULL,


3-1. adm / member_form_update.php  91줄
    sql_query(" insert into {$g5['member_table']} set mb_id = '{$mb_id}', mb_password = '".get_encrypt_string($mb_password)."', mb_datetime = '".G5_TIME_YMDHIS."', mb_ip = '{$_SERVER['REMOTE_ADDR']}', mb_email_certify = '".G5_TIME_YMDHIS."', {$sql_common} ");
를 아래와 같이 변경
    sql_query(" insert into {$g5['member_table']} set mb_id = '{$mb_id}', mb_password = UNHEX('".get_encrypt_string($mb_password)."'), mb_datetime = '".G5_TIME_YMDHIS."', mb_ip = '{$_SERVER['REMOTE_ADDR']}', mb_email_certify = '".G5_TIME_YMDHIS."', {$sql_common} ");


3-2. adm / member_form_update.php  174줄
        $sql_password = " , mb_password = '".get_encrypt_string($mb_password)."' ";
를 아래와 같이 변경
        $sql_password = " , mb_password = UNHEX('".get_encrypt_string($mb_password)."') ";


4-1. bbs / register_form_update  204줄
                     mb_password = '".get_encrypt_string($mb_password)."',
를 아래와 같이 변경
                     mb_password = UNHEX('".get_encrypt_string($mb_password)."'),


4-2. bbs / register_form_update  303줄
        $sql_password = " , mb_password = '".get_encrypt_string($mb_password)."' ";
를 아래와 같이 변경
        $sql_password = " , mb_password = UNHEX('".get_encrypt_string($mb_password)."') ";


5. bbs / write_common_update.php  69줄
    $wr_password = get_encrypt_string($wr_password);
를 아래와 같이 변경
    $wr_password = UNHEX('".get_encrypt_string($wr_password)."');


6-1. bbs / write_update.php  228줄
        $wr_password = get_encrypt_string($wr_password);
를 아래와 같이 변경
        $wr_password = UNHEX('".get_encrypt_string($wr_password)."');


6-2. bbs / write_update.php  262줄
        $wr_password = get_encrypt_string($wr_password);
를 아래와 같이 변경
        $wr_password = UNHEX('".get_encrypt_string($wr_password)."');


6-3. bbs / write_update.php  364줄
    $sql_password = $wr_password ? " , wr_password = '".get_encrypt_string($wr_password)."' " : "";
를 아래와 같이 변경
    $sql_password = $wr_password ? " , wr_password = UNHEX('".get_encrypt_string($wr_password)."') " : "";


7. bbs / move_update.php  91줄
                             wr_password = '{$row2['wr_password']}',
를 아래와 같이 변경
                             wr_password = UNHEX('{$row2['wr_password']}'),

추천
3

댓글 13개

배포버전에는 포함되지 않을껍니다.
기존 그누보드4부터 그누보드M 까지 호환성 이슈도 있고
그렇게까지 안해도 보안이슈에 문제가 되지 않을테니까요

물론 관공서용 프로젝트인경우엔 필요성이 있겠네요.
https://mariadb.com/kb/en/library/unhex/ 찾아보니 되는 것 같은데, 아직 실제로 검증을 못했네요.
와... 이런 그누의 업그레이드의 가능성을 위한 아티클들은 참 좋습니다.
저도 조만간 테스트 계정 생성해서 설치부터 시도해볼 계획입니다.
잘 될야 할텐데...

좋은 참고 사항이네요~^^ 고생하셨습니다~!!
아직까지 기존 암호화방식을 사용하더라도 사실상 크게 보안상 문제가 없기 때문에
업그레이드를 하는 것은 고민을 좀 해봐야 할 것같네요^^
보통은 기존 방식을 사용하다로도 복호화가 어려우니까요
blob 방식으로 적용해놨기에 신기해서 정리해봤는데요.

게시글 복사(이동)할때 blob 으로 처리된 비밀번호로 인해서
복사(이동)이 안되는 문제가 있습니다.
blob 필드 자료를 어떻게 복사해야할지 시간되면 찾아봐야겠습니다.
아참, 근데, 혹시 blob 타입을 칼럼에 지정했을 때 테이블의 백업시 용량이나, 또는 속도적인 측면에서 문제는 없을지도 연구가 필요할 것 같아요. 테이블당 text 칼럼은 하나정도만 존재하는 것이 좋다는 이야기를 들은 것 같은데...

아참, 그리고 레인보우테이블이라고 보편적 mysql password 함수로 인코딩 된 것들은 엄청나게 많이 갖고 있어서 충분히 예측가능하다고 하니, Salt를 친 password를 가지고 있는 것이 레인보우테이블(공개된, 해커들이 가지고 있는 수백만 패스워드의 암호화 테이블)을 무효화한다고 한 것을 공부한 기억이나네요...

여튼, 갈수록 보안에 신경을 써야하는 시대... ㅜㅜ;
BLOB는 아무래도 백업은 괜찮다고 쳐도..
복구할 때 서버 메모리를 너무 소모합니다.
+ 내용 수정시에는 일반 에디터로 열 수도 없어서 바이너리로 열어야하죠... ㅠㅠ

좋기는 한데 ㅠㅠ 골치입니다 ㅠ
끄덕끄덕... 공감됩니다.
blob 으로 선임자가 만들어놔서 사용은 하고 있는데,
가끔 서버에 과부하를 줘서 고민입니다.
과거 미디어위키가 blob으로 데이터를 저장하는 방법을 고수하고 있어서, 서버를 옮길 때마다, 복원할 때마다 CPU 사용량 100% 찍는걸 보니 참 마음이 많이 아팠습니다.

과부하를 너무 줍니다...
지금 쓰는 서버가 2009년도 산 서버 인데요.
복구할 때마다 10년 넘은 노령 서버 학대시키는 것 같아서 미안하고요... ㅠㅠ
전체 2,411 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT