2014-11-22 5 views
1

사용자 작업 로그인/등을 통해 이전 페이지로 리디렉션하는 것과 관련된 여러 게시물을 읽었습니다. HTTP_REFERRER를 통해 이전 페이지 URL을 가져 오는 것이 신뢰성이 낮고 안전하지 않다고 대부분 언급했습니다.GET을 통해 PHP의 Referrer 페이지를 안전하게 전달/검색 하시겠습니까?

내 질문에 URL 끝에 login.php?referrer=main 또는 login.php?referrer=prof과 같은 정보가 추가 될 수 있으며 어떤 식 으로든 CRSF가 위장되지 않도록 이러한 변수에 의존하고 있습니까?

POST가 좋든 나쁘겠습니까? 내가하는 일을 성취 할 수있는 확실하고 안전한 방법이 있습니까?

기본적으로 사이트의 오작동을 일으키는 악의적 인 의도없이 리디렉션 될 수 있도록 PHP에서 추천 페이지를 얻는 가장 좋은 방법을 찾으려고합니다.

TIA.

편집 : 시나리오 :

이 사용자는 코멘트 페이지를 방문하지만, 코멘트를 게시하려면 로그인 할 필요는, 그래서 login to comment 링크가 페이지에 배치 될 것이다. 사용자가 login to comment 링크를 클릭하면 대상은 login.php가됩니다. comment20303 로그인 페이지를 방문하고 확인 된 자격 증명을 제공하면 로그인하기 전에 원래 작성한 comment20303 페이지로 되돌아 와야합니다.

REEDIT : 내 질문에 간다, 리디렉션 URL을 로그인 페이지에 추가, GET을 통해 액세스 및 re-it 그것을 원래 페이지로 안전하게 반환 할 사용하여 종기? 아래의 코멘트에서 대답은 '아니오'이며, 유효성 검사가없는 것은 아닙니다. 그것은 다시 된 이유

답변

0

종종 나는 변수는 로그인 페이지에게 설정 얻을로 추천을 사용할 내 대상 페이지에

<input type="hidden" name="ref" value="login.php"/> 

그리고 내 양식에 숨겨진 필드에 참조 페이지를 배치합니다 내가 양식 대상에서 온 저를 알려줍니다 설정하고 오류를 발생했습니다 경우 내가 오류를 처리 할 로그인 페이지에서

$ref = trim(strip_tags($_POST['ref'])); 

//something causes an error (incorrect password maybe)====== 
$error = "true"; 
$msg = urlencode("Login Incorrect"); 
//no harm in putting the referring page in the GET but I don't think you need it for a login process. 
header('location: '.$ref.'?error='.$error.'&msg='.$msg); 
die(); 

돌아 가기 다시 지시

if (isset($_GET['error']) && $_GET['error'] == "true"){ 
    $error = true; 
    $msg = trim(strip_tags($_GET['msg'])); 

//Echo out the msg if it is set somewhere in your HTML 
} 

양식을 제출할 때 POST를 사용하는 것을 선호합니다. GET은 리디렉션에 사용하는 것이 가장 쉽습니다.

편집 : 귀하의 코멘트에 근거한

  1. 사용자는 주석을 입력하고 코멘트 시스템이 ID를 생성 있습니다. 그래서 인증되지
  2. 사용자는 $ _GET는 [ 'commentID가']는 thereis 삽입하는 때문에
  3. 사용자 레지스터/다시 로그
  4. 시스템 인증 URL의 ID를 전달하고 URL에 ID와 로그인/REG로 재 주석에 사용자를 연결하는 db 항목
  5. URL 및 핸들에 ID가있는 주석 편집 영역으로 사용자를 되돌립니다.항상

+0

나는 그것이 사용자가 로그인되지 않은 코멘트 페이지, 말에 사용하려는 방법을 GET 트림 스트립,'그들은 코멘트를 게시 할 수 없습니다, 그래서 추가 생각 login.php? comment20304'와 같이 로그인 URL의 끝 부분에 'ref = comment20304'를 추가하면 login.php를 통해 로그인을 확인한 후 로그인하기 전에 다시보고 있던 페이지로 리디렉션 될 수 있습니다. 나는 또한 POST를 고려했다. 그러나 나는 POST가 안전하지 않은 곳을 읽었다. 기본적으로 내 사용자가 comment20304 대신 old-xxx-ladies.com 등으로 리디렉션되지 않도록 안전한 것을 원합니다. – IIIOXIII

+0

물론, 덧글 편집 영역으로 다시 보내기 전에 id를 새 사용자와 연결하는 한 덧글 ID를 추가해도 좋습니다. 이렇게하면 다른 ID를 시도해 볼 수없고 사용자와 연결해야만 편집 할 수 있습니다. – silversunhunter

+0

그러나 숨겨진 필드는 매우 쉽습니다. 가장 쉬운 방법은 ... – baao