회원DB 변환에 관련해 질문합니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

회원DB 변환에 관련해 질문합니다. 정보

회원DB 변환에 관련해 질문합니다.

본문

저희가 운영하던 사이트의 회원 DB가 일부 암호화하여 저장되어 있고,
일부는 비암호화되어 저장되어 있습니다.
sjsjin님께서 그누보드로 회원변환을 해주셨습니다만 기존 갖고 있던 DB의 암호화가
그누보드와 호환되지 않는 함수코드라하여 불가피하게 비번을 초기화 하게 되었습니다.
저희 회원DB에 문제가 있긴했습니다.

질문을 드리고자 하는 내용은,
회원비번을 그대로 사용하는 것에 대해 아예 방법이 없느냐 입니다.
sjsjin님께서 변환해 주실 때는 저희가 급박하게 요청을 해서
자세히 살펴보거나 생각하실 겨를없이 빠르게 진행했었습니다.

그래서 일지도 몰라 혹시나 해서 질문해봅니다.
sjsjin님, 와우맨님... 고수님들...
가능성이 있다면 회원비번 초기화 하지 않고 다시 변환해보고자 합니다.
물론 가능하신 분이 직접 작업을 해주셔야겠지요.

가능여부 좀 알려주세요.
불가능하다면 어떠한 이유 때문인지도 알려주식 감사하겠습니다.



아래 글은 sjsjin님께서 변환을 진행하셨을 때 리플을 달아주신 글입니다.
-----------------------------------------------------------------------------
음..패스워드 부분에서 문제가 있군요..
처음 사이트 오픈시에는 회원패스워드를 db에 입력시에는 입력된 문자열을 보니
crypt 함수를 이용한것 같고..
중간에 사이트 리뉴얼을 하셨다는데...
리뉴얼 이후로는 패스워드를 함수처리 없이 그대로 입력하는 걸로 바뀌었더군요..
db를 보니 현재 뒤죽박죽 되어 있습니다...패스워드 컬럼값이..
그리고 어차피 그누보드는 mysql 의 password 함수를 이용하나 이 사이트 초창기의
패스워드 입력함수는 crypt 함수를 이용했으므로 복호화도 할 수 없고, 암호화된
그대로 그누보드로 이전할수도 없습니다..
결론은 특정 필드값을(필수입력값중에서) 패스워드로 대체하도록 컨버터를 만들어야
겠는데..
암튼 내부 회의에서 결정되면 통보해 주십시오.. 음..패스워드 부분에서 문제가
있군요..
처음 사이트 오픈시에는 회원패스워드를 db에 입력시에는 입력된 문자열을 보니
crypt 함수를 이용한것 같고..
중간에 사이트 리뉴얼을 하셨다는데...
리뉴얼 이후로는 패스워드를 함수처리 없이 그대로 입력하는 걸로 바뀌었더군요..
db를 보니 현재 뒤죽박죽 되어 있습니다...패스워드 컬럼값이..
그리고 어차피 그누보드는 mysql 의 password 함수를 이용하나 이 사이트 초창기의
패스워드 입력함수는 crypt 함수를 이용했으므로 복호화도 할 수 없고, 암호화된
그대로 그누보드로 이전할수도 없습니다..
결론은 특정 필드값을(필수입력값중에서) 패스워드로 대체하도록 컨버터를 만들어야
겠는데..
암튼 내부 회의에서 결정되면 통보해 주십시오..
  • 복사

댓글 전체

sjsjin님께서 작성하신 글을 보면 암호 저장과정은 이런 추론이 가능합니다.

1. 그누보드는 mysql의 password 함수로 암호화하여 저장한다.
2. 사이트 초창기에 crypt 함수로 암호화하여 저장하였다.
3. 리뉴얼 이후에 암호화 없이 그대로 저장하였다.

이걸 토대로 결과를 뽑아보면 실제로 DB에 저장되는 값은

1. 16자리
2. 12자리
3. 4자리~11자리

그러므로 먼저 암호화 하기전에 회원이 로그인을 시도하는 비밀번호 자리수를 체크해주면 문제가 해결 가능합니다.

대충 알고리즘을 짜보면

if(strlen($passwd)==16) {
  mysql의 password 함수 암호화 처리후 DB값과 비교;
}
elseif(strlen($passwd)==12) {
  crypt 함수 암호화 처리후 DB값과 비교;
  alert("비밀번호 알고리즘이 변경되었습니다. 암호를 변경해주세요.");
}
else {
  암호화 없이 DB값과 비교;
  alert("비밀번호 알고리즘이 변경되었습니다. 암호를 변경해주세요.");
}

이렇게 로그인 과정을 수정하면 되겠네요.
안녕하세요.
정확히 이해하지 못한 것 같아서 다시 말씀드립니다.
그리고 // 달빛 온도님의 말씀도 무엇을 말하려하는지 이해가 가지만 위에 적어주신 방법도 실제 사용할 수 없습니다.

// 문제점
1. 기존 사용하던 db에 저장된 패스워드 컬럼값의 현재 값 형태
컬럼 = 비밀번호 값 필드
-> 암호화없이 일반 문자(혹은 숫자,알파벳)로 저장된 비밀번호도 있으며(이 경우 위에 댓글에는 4~11 자리라고 단정되어 있으나 전혀 그렇지 않으며, 회원이 암호를 4자리나 10자리 20자리로도 사용했을 수 있습니다.)
-> 암호화된 crypt 함수(급하다고 해서 정확한 해쉬값을 체크해보지 않았으므로 innodb 의 md5, crypt, 기타 다른 암호화함수)는 자리수가 12자리 이하로 고정된것이 아닙니다.  기존 암호화된 패스워드 키를 보면 30자리가 넘는것도 있는 것을 얼피 봤습니다.
그리고 crypt 는 자리수를 정하는게 아니라 입력받은 키값을 가지고 암호화하므로 12자리 이하로 고정되지 않습니다.

* 위와 같은 문제로 위 db를 그대로 그누보드로 변환하게 되면, 당연히 문제는 패스워드 컬럼의 값입니다.
결론은 기존 db의 패스워드를 그대로 사용하고자 한다면 기존 db의 암호화된 비밀번호(대략 전체의 4/5 정도라고 판단됩니다.  나머지 1/5 정도는 암호화없이 일반 문자열로 되어 있습니다.) 를 다시 복호확한 후에, 그누보드로로 이전하면서 그누보드가 사용하는 password 함수로 암호화 처리를 해야 하는데..
아시다시피 암호화함수로 암호화된것은 다시 복호화할 수 없습니다.
(물론 일부는 복호화할 수 있는 로직 패턴이 인터넷에 나와있습니다만... 모든 암호화키에 대한 것이 아니고, mysql 3.x 버젼에서 사용되었던 password 함수에 대한 복호화 로직이었습니다.)

* 따라서 기존 회원 db의 패스워드 입력방식을 다시 바꾸어서 홈페이지 공지를 통해, 모든 회원이 로그인후에 다시 패스워드를 변경하고, 이 때 변경하는 패스워드는 일반문자열이나, mysql 의 password 함수로 처리해서 재저장하면 그누보드로 그대로 이전이 가능합니다.
그러나 과연 모든 회원이 로그인해서 다 변경할 것인지??
(기존 db는 innodb 를 사용한것으로 알고 있습니다.)

일단 제 의견은 위와 같습니다.
작업시에도 충분히 전화상으로 말씀을 드렸던 내용이고..
혹, 누군가 작업을 하게 된다면, 기존 db의 패스워드 컬럼의 값들을 유심히 살펴보고 기존에 어떤 암호화 함수로 처리했는지를 먼저 체크한후에(만약 mysql password 함수로 암호화했다면 그대로 이전이 가능합니다만..) mysql 의 password 함수로 암호화처리한게 아니라면 복호화가 가능한지를 체크해보고 작업을 하시는것이 좋을 듯 합니다.
그리고 작업시에는 반드시 원본 db를 백업받아놓고 하시는것도 잊지 않았으면 합니다.
우선은 저는 "고수"는 아니고  이런 저런 초보의 실력으로 사이트 리뉴얼을 취미삼아 그동안 경험한것을 바탕으로  zeki 님의 고민을 덜어 보려고 답변을 드려 봅니다....

crypt는 유닉스 계열의 암호화 함수로서 데이타를 복호화할 필요가 없는 "인증" 분야에 주로 쓰인다고 합니다...
그리고 그누보드에서는 mysql 암호화 저장 함수로 패스워드 및 주민번호를 저장하는 걸로 알고 있습니다....

1. 그런데 님의 사이트에서는 처음에는 crypt()함수로 패스워드 암호화를 했고
2. 그다음에는 일반 텍스트로 패스워드를 저장을 했고....

3. 그리고 이번에 다시 그누를 사용하면서 mysql 의 password 함수를 사용해야 하니 당연히 복잡할수 밖에는 없겠지요.........


굳이  방법을 제시한다면 1번을 크랙해서 텍스트와 한다음 2번과 합쳐서 다시 3번을 실행하시면 되는데....///


말은 쉽지만 제가 얼마전 경험한것을 말씀드려 보겠습니다.....  저도 어떤 사이트를 관리하고 있는데 (지금 저의 회원정보에 등록된것 말고...)  제로를 대략 1년 정도 사용을 하다 보니 회원 가입이 100여명정도가 되었는데 제로가 실증이 나서 킴스 보드를 사용해 보려 하니 문제 되는 것이 패스워드와 주민번호더라고요.....  그중 패스워드가 당연 더 중요하겠지만 말입니다.....  부연 설명을 드리면 제로는 mysql 암호화 저장 함수로 패스워드를 저장하고 킴스는 일반 텍스트로 그냥 저장합니다....... 위의 2번과 같은 경우겠지요......

그래도 킴스로 바꿔보겠다는 일렴으로 암호화된 패스워드를 인터넷을 뒤져서 크랙 프로그램을 찾아서 크랙을 하기 시작했습니다.....*당연 악용은 전혀 생각 안했고 단지 사이트 리뉴얼이라는 일렴이였습니다....오해 없으시길...///)
이부분에서 알아 낸것은 진짜로 4자리 패스워드는 순식간에 찾아낸다는 것을 알았습니다.....  하지만 6자리 이상짜리는 몇시간 내지는 하루가 걸려도 찾아내지 못하는 패스워드가 있더란 말씁입니다..... 물론 제가 다운 받은 단어사전이 후져서(?)그럴수도 있었겠지만 말입니다....(진짜 해커님(?)들은 자기들 만의 단어사전을 고이 고이 간직한다고 들었습니다.....)

결론 부터 말씀드리면 20여 고객 패스워드 크랙하는데 일주일 정도 걸렸는데 .......    도저히 시간적인 문제때문에 킴스로 가는 것을 포기.......    이제사 생각하지만 그누로 오길 잘했다고 생각 합니다...(ㅋㅋㅋㅎㅎ)



zeki 님에게 제안하고 싶은것은 위의 1번에 적용된 고객분이 몇분이 되시냐에 따라 가능과 불가능을 판가를 해야한다고 생각 합니다....

유리그릇을 집어던져 깨뜨리는것은 불과 순식간이지만 그것을 일일히 주어서 다시 붙이는데는 상당한 시간과 노력이 필요하다는 말씀드리고 싶네요.....  선택은 님의 자유이고 고민하시기 보다는 빠른 판단으로 "정신건강" 유지 하세요.....  즐거운 하루 되세요......
두분 답변 감사합니다.
sjsjin님 결론은 조금의 여지도 없이 불가능하다는 말씀이시죠?
제가 그누보드 사용하자고 우겨서 진행했는데 울회사에서 죽일 놈 됐네요 ㅡㅡ;
그동안 관리가 잘 못됐었던 것도 문제가 있었죠.

sjsjin님.
회원정보 메뉴에서 회원정보 수정시 비번을 묻고 회원정보 부분으로 들어가지잖아요?
초기화된 비번으로 처음에 로그인 했던 회원은
초기화된 비번으로 회원이 처음 로그인하면 '비번을 변경하세요'라는 메세지를 띄운 후
비번 바꾸는 페이지로 이동할 수 있는 스크립트를 짜려면 힘들까요?
간단히 짜주시거나 힌트 좀 주세요.
현재로서는 그 방법 밖에 없을 듯 합니다. ㅠㅠ

뭐 이런식으로요.
if
  password==[초기화되었던 문자열]
goto [비번변경 메뉴]

else goto [사이트 인덱스 페이지]

프로그래밍을 할 줄 몰라 위 처럼 생각만 해봤습니다.
가능할 것 같기도 한데요... 도움 좀 부탁드립니다.
// ccteam 님
mysql 암호화 내장 함수는 많습니다.
그누보드에서 사용하는 방식이 password 함수를 이용한 암호화 방식이라서 대부분이 이것만 생각하고 계시는데요..
암호화된 해시 키값을 정확히 확인하기전에는 100% 어떤 암호화 함수로 암호화 했는지 확인하기 어렵습니다.
mysql 에서 암호화에 사용되는 함수는 아래처럼 여러개가 있습니다..
제가 위에서 예를 든것은 crypt 함수일 뿐이며 실제 해시 키값을 체크해보지 않았으므로 아래중에 어떠 함수인지는 확인할 수 없으며, 단 password 함수가 아니라는 것만 확인했습니다.
* 아래 함수는 모드 mysql 에서 내장된 암호화 함수입니다.
PASSWORD
MD5
SHA1
ENCRYPT
위에서 어떤 함수를 이용했느냐가 문제가 되는 겁니다.

// zeki 님
문의하신 대로 처음 로그인인지를 체크해서(초기화 비번값으로) 정보수정 '비밀번호를 변경하세요' 메세지를 띄우고 정보수정 페이지를 바로 리턴하는 것도 물론 가능합니다.
그러나 간단히 몇 자 적어서 할 수 있는 부분이 아니라서 샘플을 짜서 보여드리기는 난감합니다.. ㅡㅡ;
기존 db 비밀번호를 완벽히 이전하는 방법이 있기는 합니다..
좀전에 막 샤워하려다가 잠깐 생각이 났는데...
기존 db의 패스워드 암호화 함수가 어떤 것이었는지 해시 키값을 테스트해서 확인한다음에 사용하실 그누보드4버젼의 패스워드 암호화 함수를 현재 그누보드에서 사용하는 password 함수가 아닌 기존 db의 암호화에 사용했던 암호화 함수로 바꿔주면 됩니다.
이 경우 다음과 같은 문제가 있습니다.

-> 그누보드4(사용하시는게 4버젼인 경우)의 모든 패스워드 관련 부분을(회원가입,비밀번호 찾기, 기타 비밀번호와  관련된 모든 부분)전면 수정해야 합니다...

회사에서 입장이 난처하게 되셨다고해서 생각해 본 것입니다.
이렇게 하면 기존 db에 자료를 패스워드를 포함하여 그대로 이전이 가능합니다..
(일부 암호화 안된 비밀번호들은 모두 기존 함수로 암호화 해주고..)
참, 한 가지 더..
시간이 급박한게 아니라면 위에 문의하신(처음 로그인일 경우 자동으로 정보수정으로 리턴)부분은 제가 처리해 드릴 수 있습니다만..(물론 무료로..)
그러나 시간이 급하시다면 제가 현재 진행중인 작업때문에 당장은 처리해드리기가 힘드니 다른분께 의뢰하시는게 좋을 듯 합니다.
그러니까 기존의 회원비번의 암호화를 기존으로 두고 그누보드를 이전에 사용했던 암호화 함수를 사용하게 하는것이죠?
이에 따른 회원관리 부분이 모두 이전에 사용된 암호화 함수로 변경하면 가능하시다는 말씀이죠?
하지만 이것도 말씀하신 해시 키캆을 봐야만 가능여부를 확실히 알 수 있는거겠죠?

우선 저희 사장님과 상의를 해봐야겠지만...
전면 재수정 작업을 하시려면 시간과 비용이 적잖히 소요될 것 같군요.
어느정도의 시간과 비용이 필요한지 지난번 보내주셨던  메일주소로 알려주시면 감사하겠습니다.
물론 최종결정은 사장님과 상의해본 후 연락 드리겠습니다.

기존의 홈페이지로 현재 운영하고 있으며, 리뉴얼 중입니다.
리뉴얼된 페이지를 이달 말에 오픈하는 것을 기점으로 잡고 있는데요.
위에 말씀 드렸던 루틴을 시간이 되신다면 주중에 만들어 주셨으면 감사하겠습니다.
그럼 메일 주시기 바랍니다.
1. 그누에서 사용하는 비밀번호 필드를 새로 만듭니다. 같은 이름으로요.
현재입력된 비밀 번호 필드는 다른 이름으로 변경하시구요.

2. 회원 로그인 시 -> 그누보드 비밀번호 필드에 값이 있나 확인해서 있으면 이 값으로 비교해 로그인 실행, 그렇지 않다면 로그인 아이디와 입력한 비밀 번호로 이전 버전 비번 필드에서 텍스트비교/암호화비교 해서 로그인에 성공한다면 그누보드 비밀번호 필드에 입력한 비밀번호를 password 함수를 이용해서 저장하면 됩니다.

즉.. 직접 비번 변경을 하는게 아니고 로그인한 회원들에 한해서 수동으로 변경 하시는 겁니다.
// zeki 님

기존의 비밀번호를 이식이나 복호화 하지 않고도 홈페이지 운영이 가능한 방법이 있습니다.

1. 기존의 비밀번호를 버리고 회원의 주민등록번호 뒷자리 7자리를 그누보드의 암호화 체계인 mysql의 password함수로 일괄적으로 변경해서 DB에 저장시킨다.
2. 홈페이지 메인화면이나 팝업창, 또는 로그인 입력부분 밑에 빨간 글자로 "홈페이지 리뉴얼 작업으로 인해 모든 회원님의 비밀번호가 주민등록번호 뒷자리 7자리로 변경되었습니다. 수정해주십시오."를 추가한다.
3. 로그인후 현재의 비밀번호와 주민등록번호 뒷자리 7자리가 일치한다면 비밀번호 변경 페이지로 자동이동 되면서 비밀번호 변경을 지시하는 경고창을 띄운다.

이 정도 입니다.
이 방법은 많은 홈페이지들이 mysql 버전이 3.x에서 4.x로 변경되어 password함수가 변경되었을때 많이 써먹던 방법입니다.
단 이 방법은 기존에 회원의 주민등록번호를 암호화 하지 않고 DB에 저장했다는 사실이 전제되어야겠지요.

1번 과정은 함수 하나만 만들어주면 간단히 해결되는 어렵지 않은 사항입니다.
회원이 100명이든 10000명이든 for문 처리 해주면 쉽죠.
해뜰녘님, 달빛온도님

제가 처음 생각하고 있던 내용이 달빛온님이 말씀하신 내용과 하나도 다르지않고 같습니다. ^^;
sjsjin님 께서 수고해주셔서 현재 주번 뒷자리 7자리로 초기화 되어 있는 상태입니다.
이미 변환해놓은 상태이지만, 그래도 원래 쓰던 비번을 쓸 수 있는 방법이 있을까 싶어 질문드린겁니다.

그런데 달빛온도님 께서 말씀하신 간단히 for문 처리해주면 쉽다지만... 저한테는 어렵네요. ㅎㅎㅎ
이 귀회에 php, mysql 공부 좀 많이 해놔야겠네요.
뭘 알아야 면장질을 하죠. ㅡㅡ;
제가 설명을 잘못했나 보네요..
제가 설명한 방법은 현재의 비밀 번호를 그대로 쓰는 방법인데요..

홈페이지 옮기면서 운영자가 수동으로 비밀번호 관련 작업을 하는게 아니고
회원들이 비밀번호를 치고 들어왔을때 프로그램에서 자동으로 새형식의 비밀번호로 바꿔주는 거죠..

단점이라면 등록된 모든 회원들이 로그인 할때까지 모든 패스워드 변환이 이루어 지지 않는다는 거구요..
새로운 비밀번호를 입력하라는 공지를 띄우지 않으려면 최선의 방법인거 같습니다..
© SIRSOFT
현재 페이지 제일 처음으로