CI 묻고 답하기

제목 [초보] 로그인 후에 되돌아가기..
글쓴이 헛발이 작성시각 2010/03/02 14:35:52
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 29342   RSS
ci포럼 소스를 보면서 로그인 후에 전에 있던 곳으로 돌아가는것을 하고 있는데요..
자꾸 에라가 나네요...

An Error Was Encountered

The URI you submitted has disallowed characters.

이런 에라가 나는데요.. 혹시 왜 나는지 아시나요?

ci포럼과 같이 소스는
 

$rpath = str_replace("index.php/", "", $this->ci->input->server('PHP_SELF'));
$rpath_encode = base64_encode($rpath);
redirect('/auth/login/'.$rpath_encode);
이렇게 보내는데요...
이상한게... /(루트)를 base64_encode해서 나온 문자 Lw== 이것이요..
도메인/auth/login/Lw==  이렇게 되면서 위와 같은 에라가 나네요..?? 또는 좀 복잡한
도메인/auth/login/L2FkbWluL2dyb3VwL3JlZ2lzdA== 이렇게 되도 같은 에라가 나고요...
도메인/auth/login/L2FkbWlu 요 정도는 에라가 안나고요...

음... 혹시 아시는 분 계시나요?
 다음글 [초보] 포럼소스 설치중 문제~ (3)
 이전글 그냥 CI 를 포기 해야 하는 건지...참... (3)

댓글

헛발이 / 2010/03/02 14:39:10 / 추천 0
아 기억났네요.. ㅋㅋㅋ 전에 웅파님이 알려 주신것이 팍! 하고 기억났습니다..

config에서
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
이것을
$config['permitted_uri_chars'] = '';
이렇게 하라고 한게 생각났습니다.. ^^
쓸때 없는 질문 한다고 혼날뻔했네요 ㅋㅋ
변종원(웅파) / 2010/03/02 14:47:21 / 추천 0
제가 말씀드린 방법은 일단 보안단계를 하나 없애는거라 별로 추천하지는 않습니다.
위 config의 내용은 말 그대로 주소에서 쓸 수 있는 캐릭터를 제한하는 것이라 아무것도 없이 사용할 경우
< 이런것도 쓸 수가 있습니다.

되도록이면 원래대로 쓰시고 base64_encode 대신에 rawurlencode로 쓰시기 바랍니다. (전에 어떤 분께서 올려주셨던..)
base64_encode함수를 쓰게되면 결과값에 "="가 나옵니다. 따라서 ci의 기본 permitted_uri_chars를 통과하지 못해서 생기는 현상입니다.
헛발이 / 2010/03/02 15:21:32 / 추천 0
그러면요..
$rpath = str_replace("index.php/", "", $this->ci->input->server('PHP_SELF'));
$rpath_encode = rawurlencode($rpath);
redirect('/auth/login/'.$rpath_encode);
이렇게 하면 되나요? 이렇게 했더니...URL이
도메인/auth/login/%2F  이렇게 되서

Not Found

The requested URL /auth/login// was not found on this server.

이렇게 되는데요...
음...

변종원(웅파) / 2010/03/02 16:09:19 / 추천 0
체크하는 부분에 %가 들어있는거라 에러가 안 날텐데 이상하네요?
$rpath_encode 전체를 올려줘보세요
헛발이 / 2010/03/02 16:18:07 / 추천 0
도메인/auth/login/%2Fadmin 이렇게 되거나
도메인/auth/login/%2F 이렇게 되거든요...

음...둘다 에라가 나는데요... 혹시 .htaccess에 문제는 아닐까요? (초보적인 지식으로.. ㅋ)
헛발이 / 2010/03/02 16:20:38 / 추천 0
제가 포럼에서도 테스트 해보니.. 같은 에라가 나는데요..

http://www.codeigniter-kr.org/auth/login/%2F

변종원(웅파) / 2010/03/02 16:27:54 / 추천 0
네 당근 에러 납니다. %2F = /

돌려줄 주소를 rawurlencode로 한번 돌리고 그 값을 다시 base64_encode하시기 바랍니다.
그렇게 해보니까 주소가 좀 길어지기는 하지만 영어 대소문자, 숫자로만 표시가 됩니다.

base64_encode(rawurlencode($urls))

풀때는 순서가 반대겠죠?
헛발이 / 2010/03/02 16:29:43 / 추천 0
아 ㅋㅋㅋ 좀전에

rawurlencode(base64_encode($urls))

이렇게 해 밨었는데 ㅋㅋㅋㅋ 안되더라구요 ㅋㅋㅋ 반대군요 ㅋㅋ
변종원(웅파) / 2010/03/02 16:31:33 / 추천 0

보안과도 연관이 있는 문제라 테스트 구문 올립니다.

 

<?php
$som = "http://test.com/index.php?fd=teST";
//echo convert_uuencode($som);
echo $som;
echo "<BR>rawurlencode() : ";
echo rawurlencode($som);
echo "<BR>base64_encode(rawurlencode()) : ";
$dim = base64_encode(rawurlencode($som));
echo $dim;
echo "<BR>rawurldecode(base64_decode()) : ";
echo rawurldecode(base64_decode($dim));
?>
결과
http://test.com/index.php?fd=teST
rawurlencode() : http%3A%2F%2Ftest.com%2Findex.php%3Ffd%3DteST
base64_encode(rawurlencode()) : aHR0cCUzQSUyRiUyRnRlc3QuY29tJTJGaW5kZXgucGhwJTNGZmQlM0R0ZVNU
rawurldecode(base64_decode()) : http://test.com/index.php?fd=teST
헛발이 / 2010/03/02 17:23:58 / 추천 0
로그인이 잘 되서 늦게 답변 합니다. .ㅋㅋ
넵 감사합니다..