programing

PHP에서 헤더 ( 'Location ..')를 통해 리디렉션 후 'exit'를 호출해야하는 이유는 무엇입니까?

goodcopy 2021. 1. 14. 23:16
반응형

PHP에서 헤더 ( 'Location ..')를 통해 리디렉션 후 'exit'를 호출해야하는 이유는 무엇입니까?


PHP에서 사용자를 리디렉션하려면 헤더 함수를 사용할 수 있습니다.

header('Location: http://smowhere.com');

다른 PHP 코드의 실행을 방지하기 위해 호출 exit;후에 를 두는 것도 좋은 방법이라는 것도 잘 알려져 header있습니다. 그래서 내 질문은 : 헤더 위치 호출 후 코드가 효과적으로 실행될 수 있습니까? 어떤 경우에? 악의적 인 사용자가 header('Location..')전화 를 완전히 무시할 수 있습니까? 어떻게?


헤더 위치 호출 후 코드가 효과적으로 실행될 수 있습니까?

예, 항상. header데이터 만의 라인 요청 리디렉션 브라우저를. 페이지의 나머지 부분 은 여전히 PHP에 의해 제공 되며 단순히 header명령이 실행되는 것을 막음으로써 클라이언트가 볼 수 있습니다 .

wget예를 들어 단순히 리디렉션을 따르지 않도록 지시 하는 등의 명령 줄 클라이언트를 사용하면 쉽게 수행 할 수 있습니다.

결론 : 막지 않으면 PHP는 header호출 후에도 전신을 보냅니다 . 이 본문은 특별한 해킹 기술 없이도 수신자가 사용할 수 있습니다.


리디렉션하지만 그렇게하지 않으면 die()/ exit() 코드는 항상 실행되어 표시됩니다 .

다음 예를 살펴보십시오.

admin.php :

if (authenticationFails)
{
    // redirect and don't die
}

// show admin stuff

위치 헤더 이후에 실행을 종료하지 않으면 모든 사용자가 액세스 할 수 있습니다.


header() HTTP 헤더를 보내야한다고 PHP에 지시합니다 ... HTTP 헤더를 보낼 때.

그리고 그것들은 header ()에 대한 호출을 작성할 때 즉시 전송되지는 않지만 보낼 때 (일반적으로 PHP가 응답 본문output_buffering 을 보내야 할 때-생각보다 늦을 수 있습니다. ) .

header()따라서을 호출하면 이 명령문 다음에 작성된 코드가 실행되지 않는다는 보장이 절대적으로 없습니다 . exit/ 를 사용하여 실행해서는 안된다고 표시하지 않는 한 die.

사용자는 Location원하는 경우 헤더 를 무시할 수 있습니다 . 그러나 호출 후 코드 header()가 실행되거나 실행되지 않을 수 있다는 사실에 대해서는 아무것도 변경 하지 않습니다. 그 문제는 서버 측입니다.


header () 뒤에 PHP 코드가 실행됩니다. php.net 에서 볼 수 있듯이 때로는 이것이 필요합니다 . 그렇지 않은지 확인하기 위해 프로그램 흐름을 완전히 종료합니다.


re : 헤더 위치 호출 후 코드를 효과적으로 실행할 수 있습니까?

예, 스크립트를 닫지 않으면 가능합니다.

re : 어떤 경우에?

모든 경우에.

악의적 인 사용자가 header ( 'Location ..') 호출을 완전히 무시할 수 있습니까?

아니요, 사용자가 문제에 대해 발언권이 없다는 것이 정확 해집니다.


종료 호출이 없으면 스크립트가 종료되는 정확한 시점 / 시간은 두 가지 요소로 귀결됩니다.

  1. 클라이언트 브라우저가 리디렉션에 반응하는 속도
  2. 나머지 스크립트를 실행하는 데 걸리는 시간입니다.

브라우저가 Location 헤더가 나오는 순간 리디렉션 작업을 즉시 시작한다고 가정 해 보겠습니다. 즉, 리디렉션이 발생하는 연결을 종료하므로 새 위치에 연결할 수 있습니다. 이것은 일반적으로 웹 서버가 리디렉션 스크립트를 종료 함을 의미합니다. 그러나 헤더가 서버-> 클라이언트에서 이동하고 TCP 링크 종료 프로세스가 클라이언트-> 서버에서 이동하는 데 걸리는 시간은 스크립트가 계속 실행될 수있는 시간입니다.

참조 URL : https://stackoverflow.com/questions/2747791/why-i-have-to-call-exit-after-redirection-through-headerlocation-in-php

반응형