CI 묻고 답하기

제목 encrypt class를 이용한 암호화 결과에 대한 질문입니다.
글쓴이 SMINT 작성시각 2012/02/08 10:22:54
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 25811   RSS
안녕하세요 :)

현재 비밀번호 분실시 이름, 생년, 이메일, 아이디 일치를 확인한 후 이메일에 비밀번호 변경 페이지의 URL를 보내주려고 하는데
암호화키를 $this->encrypt->encode()를 이용해서 생성하려고 합니다.
암호화키에는 아이디+이메일+random_string(20글자, 이 랜덤스트링이 DB에 들어가있습니다.)가 들어가있고,
$this->encrypt->decode()를한 결과에서 나오는 아이디, 이메일, random_string의 매칭이 제대로 되어 있는가를 확인합니다.
즉 user/forget_pw/code/암호화된키 의 형태의 URL로 접근하면 해당 계정의 비밀번호 변경 페이지를 보여주는 것이죠.

^^;; 이해가 잘 되셨을런지... ㅠㅠ

그런데 문제는, $this->encrypt->encode()로 만들어진 string에 백슬래시(/) 등이 들어가 있다는 것입니다.
이 때문에 urlencode, urlencode를 두 번 사용하는 방법 등을 하려고 했습니다
(참고 :  http://stackoverflow.com/questions/311801/url-encoded-forward-slashes-breaking-my-codeigniter-app)
하지만 안되는군요...

최대한 아파치의 AllowEncodedSlashes On 설정을  건드리지 않고 하고싶은데, 방법 없을까요?
백슬래시를 언더스코어(_)로 치환한 url을 보내주는 것도 생각을 해봤는데,
$this->encrypt->encode() 로 만들어지는 스트링에 존재할 수 있는 문자의 종류를 몰라서 함부로 이렇게 할 수도 없고...

혹시 이 문제를 해결할 수 있는 방법이나
다른 방법으로 이메일 변경 페이지를 보낼 수 있는 방법 있을까요?
아니면 random_string(20글자) 자체를 보내는 것은 보안상 괜찮을까나요?
 다음글 $this->email->send()를 비동... (5)
 이전글 워터마크 질문입니다. (2)

댓글

변종원(웅파) / 2012/02/08 10:54:48 / 추천 0
base64관련함수로 돌려도 /, = 는 어쩔수 없습니다.

외부라 사무실 들어가서 제가 쓰는 인코더, 디코더 함수 올려드릴께요.

어쩔수없이 치환하셔야합니다.
SMINT / 2012/02/08 11:06:48 / 추천 0
웅파님// 그렇군요...

함수 올려주신다니 정말 감사합니다!
변종원(웅파) / 2012/02/08 13:15:32 / 추천 0
 주소 생성
$rpath = str_replace("index.php/", "", $_SERVER['PHP_SELF']);
define('RPATH_ENCODE', strtr(base64_encode(addslashes(gzcompress(serialize($rpath), 9))), '+/=', '-_.'));

디코딩후 주소 리다이렉트

redirect(unserialize(gzuncompress(stripslashes(base64_decode(strtr(RPATH_ENCODE, '-_.', '+/='))))),'refresh');





SMINT / 2012/02/08 13:17:05 / 추천 0
감사합니다 웅파님!! 잘 쓰겠습니다 :)