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 까지 호환성 이슈도 있고
그렇게까지 안해도 보안이슈에 문제가 되지 않을테니까요
물론 관공서용 프로젝트인경우엔 필요성이 있겠네요.
요즘 MariaDB도 많이 사용하는데...
와... 이런 그누의 업그레이드의 가능성을 위한 아티클들은 참 좋습니다.
잘 될야 할텐데...
아직까지 기존 암호화방식을 사용하더라도 사실상 크게 보안상 문제가 없기 때문에
업그레이드를 하는 것은 고민을 좀 해봐야 할 것같네요^^
보통은 기존 방식을 사용하다로도 복호화가 어려우니까요
게시글 복사(이동)할때 blob 으로 처리된 비밀번호로 인해서
복사(이동)이 안되는 문제가 있습니다.
blob 필드 자료를 어떻게 복사해야할지 시간되면 찾아봐야겠습니다.
아참, 그리고 레인보우테이블이라고 보편적 mysql password 함수로 인코딩 된 것들은 엄청나게 많이 갖고 있어서 충분히 예측가능하다고 하니, Salt를 친 password를 가지고 있는 것이 레인보우테이블(공개된, 해커들이 가지고 있는 수백만 패스워드의 암호화 테이블)을 무효화한다고 한 것을 공부한 기억이나네요...
여튼, 갈수록 보안에 신경을 써야하는 시대... ㅜㅜ;
복구할 때 서버 메모리를 너무 소모합니다.
+ 내용 수정시에는 일반 에디터로 열 수도 없어서 바이너리로 열어야하죠... ㅠㅠ
좋기는 한데 ㅠㅠ 골치입니다 ㅠ
blob 으로 선임자가 만들어놔서 사용은 하고 있는데,
가끔 서버에 과부하를 줘서 고민입니다.
과부하를 너무 줍니다...
지금 쓰는 서버가 2009년도 산 서버 인데요.
복구할 때마다 10년 넘은 노령 서버 학대시키는 것 같아서 미안하고요... ㅠㅠ