2011-09-05 3 views
0

좋은 URL을 변환하려면 .htaccess mod_rewrite을 사용하고, PHP 변수 page을 사용하면 index.php으로 URL 부분을 보냅니다. 나머지 처리가 완료됩니다.PHP는 질의 문자열을 통해 전달 된 변수를 막지 만 동일한 변수가 아파치를 통해 전달되도록 허용합니다. mod_rewrite

RewriteRule ^([a-zA-Z0-9-_/]+)$ index.php?page=$1 [QSA,L] 

이제 일부 악의적 인 사용자가 쿼리 문자열을 통해 page 변수를 전달하면 받아 들여집니다. 예를 들어 login 페이지를로드하는 대신 사용자가 http://mysite.com/login?page=registration을 호출하면 사용자 지정 페이지 registration이로드됩니다.

htaccess 파일에서 문제를 해결하는 방법을 알려주세요.

+1

mod 재 작성에서'QSA' 만 제거하면 전달 된 모든 쿼리 문자열을 무시합니다 ... http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa –

+0

여전히 필요합니다. 다른 쿼리가 전달되면 쿼리 문자열의 page = ''부분을 무시하기 만하면됩니다. QSA를 끄지 못한다. – giga

+0

요청한 실제 페이지를 찾기 위해'$ _SERVER [ 'REQUEST_URI']'를 읽지 않는 이유는 무엇입니까? "악의적 인 사용자"는 코드를 이미 서버에서 실행하지 않는 한 이렇게 혼란 스러울 수 없습니다. – LazyOne

답변

4

나는 똑같은 답변을 찾아 보았고 해결 방법이 없다고 확신한다. 유일한 해결책은 page98198bs129387b13처럼 임의의 "키"로 바꾸는 것입니다. 따라서 그들은 열쇠를 알아야 할 것입니다. 그러나 실수하지 마십시오. 이것은 보안을 유지하지 못하는 것입니다 ... index.php에서 적절한 검사를하는 것은 여전히 ​​필요합니다 (그리고 상관 없습니다).

+1

+1 키 메서드에 대한 +1 * 그리고 * 모호성을 통한 보안이라는 개념 * –

+0

해결책처럼 보이지만'.htaccess'에서 임의의 키로'page'를 어떻게 대체합니까? 샘플 코드를 제공해 주시겠습니까? – giga

+1

@giga 문자 그대로'page'를 임의의 키로 대체하는 것을 의미합니다 ** ** 페이지 이름을'98198bs129387b13'으로 바꾸고'$ page = $ _GET [ '98198bs129387b13']'in index.php 또는 그런 것. – Andreas

0

사용자가 로그인 페이지를로드하는 대신 http://mysite.com/login?page=registration을 호출하면 사용자 지정 등록 페이지가로드됩니다.

당신이 사용 mod_rewrite를 고칠 수 - 결국, 무엇을 대신

domain.com/registration 

들어가는 공격자를 중지의를?

승인되지 않은 사용자가 결코 액세스 할 수없는 액세스 페이지 인에 액세스 할 수 있는지 확인해야합니다.

+0

나는 등록에 대한 접근을 막고 싶지 않다 ... 일부 악의적 인 '모듈'(프로젝트가 오픈 소스 및 사용자 공헌 코드가 설치 될 수 있는지)이 궁금하다면 생성 된 모든 URL에 몇 페이지 = 어쩌구? – giga

관련 문제