테스트 사이트 - 개발 중인 베타 버전입니다

멍부, 멍게 , 똑부, 똑게

멍부 : 멍청하면서 부지런한 사람
멍게 : 멍청하면서 게으른 사람
똑부 : 똑똑하면서 부지런한 사람
똑게 : 똑똑하면서 게으른 사람

조직에 이로운 순서로 나열하자면

똑게 > 똑부 > 멍게 > 멍부 순이다.

나도 똑게가 되고 싶다.


ps.
어제 배포한 그누보드 패치에 문제가 있습니다.
아직 안하신 분들은 기다려 주십시오.
오늘 보안보완패치 하겠습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 16개

익스를 확대하면 왜 관리자님 UFO의 이동경로가 보이는건지 원리가 궁금합니다
저도 첨봐요. ㅎ
전 [http://c.ask.nate.com/imgs/qrsi.php/7953564/10456556/0/1/A/01.JPG]
너무 부지런한면 안되지 말입니다.^^
동감합니다. ㅋㅋㅋ ^^
동참계는 무너진건가요 ㅠㅜ
동감 == 동참?
웬일로 제가 이번 패치 빨리 했나 했습니다...ㅠㅠ
관리자님, 패치를 잠깐 보았는데 핵심은 회원정보 수정시 저장하는 패스워드가 들어있는 세션이 삭제되는 경우가 없기 때문에 남아있는 세션을 통해 패스워드를 알아낼 수 있다는 것이 요지인 것 같은데요...

이런 방식은 어떨까요?

lib/common.lib.php:

// 영문과 숫자로된 랜덤 문자를 리턴
function rand_key($len, $chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
$key = '';
$len_chars = strlen($chars);
for ($i = 0; $i < $len; $i++) {
$pos = rand(0, $len_chars-1);
$key .= $chars{$pos};
}
return $key;
}

function encrypt($string, $key)
{
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}

function decrypt($string, $key)
{
trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}


bbs/register_form.php:

//77라인 정도에 교체

77 $encrypt_key = md5(rand_key(5); // 다섯개의 랜덤 문자를 이용. 그것을 md5로 바꾸자.
78 $encrypted_password = encrypt($_POST[mb_password], $encrypt_key);
79 set_session('ss_encrypt_key', $encrypt_key);


skin/member/basic/register_form.skin.php:

//90라인 정도에 추가
90 <? if ($w=='u' && $encrypted_password){?><input type=hidden name=encrypted_password value="<?=$encrypted_password;?>" /><? } ?>

bbs/register_form_update.php:

//371라인부터 교체
else {
$encrypt_key = get_session('encrypt_key');
$tmp_password = decrypt($_POST[encrypted_password], $encrypt_key);
}
네 세션에 남아있는 패스워드가 문제가 되는것입니다.
오늘 다시 수정된 패치를 올려 놓았습니다.
감사합니다.
ps. 코드가 너무 길면 적용하는데 어려움이 있습니다. 알려주신 코드는 참고하겠습니다.
여전히 문제는 패스워드가 세션에 남아있다는 게 걸립니다. 암호를 간단하게 한 사람들의 경우(이 사람들이 문제겠지만) 세션에 남아있는 패스워드 역시 풀릴 수 있는 가능성은 남아있습니다. 다음의 예를 보시면 이해가 될 겁니다: http://8220.tistory.com/1166334482

예전에 외국 사이트에서 본 글이 있는데 지금은 기억나지 않지만 요점은 시간이 걸리긴 해도 복호화가 가능하다는 겁니다. 고성능 컴퓨터를 가지고는 시간이 엉청 단축된다는 이야기외함께요.
곰곰히 생각해보았는데 왜 세션이 필요한지에 대해 의구심이 갑니다. 세션자체가 필요없이 가능하지 않나요???

최종으로 한 패치를 보면 sql_password로 암호화한 패스워드인데요...세션이 필요한 이유가 다시 register_form.php로 돌아가기 위한 것이라면
$tmp_password = get_session('ss_tmp_password'); 이게 아니라 데이터베이스에서 읽어오면 되지 않나요???

즉 처음부터 저장할 필요없이 register_form_update.php에서 register_form.php로 넘어가기전 데이터베이스에서 직접적으로 불러와서 그 값을 mb_password에 대입해주면 세션에 패스워드를 저장할 이유가 없어집니다.
회원정보 수정시 패스워드를 한번 더 물어보게 됩니다.
이게 문제가 되는것이죠.

해시테이블로 패스워드를 푸는 문제는 논외로 치겠습니다.
회원정보 수정시 패스워드를 물어보면 그 값이 register_form.php로 넘어옵니다. 이 값을 세션에 해시로 저장하여 나중에 register_form_update.php에서 register_form.php로 넘오올 때 다시 사용한다는 것은 알고 있습니다.

제 말은 세션에 해시 저장 자체가 불필요하다는 얘기입니다. 즉 register_form_update.php에서 $tmp_session = get_session("ss_tmp_password"); 이 아니고 $row = sql_fetch("select mb_password as passwd from $g4[member_table] where mb_id='$member[mb_id]'"); $tmp_session = $row[passwd]; 이렇게 해도 된다는 거구요. 그렇게 하면 세션에 패스워드를 저장할 필요 자체가 없어진다는 이야기입니다.
쿼리를 한번 더 실행한다는 단점이 있지만 패스워드를 아예 노출하지 않는다는 장점이 더 크므로 다음번 패치에 적용하도록 하겠습니다.
감사합니다.
멍청한데 부지런한 사람은 적보다 위험하다..........히틀러.
ㅠㅠ 쇼핑몰까지 다 패치했는뎅;;

게시판 목록

자유게시판

글쓰기

첫글

1개월 전
🐛 버그신고