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 ..') 호출을 완전히 무시할 수 있습니까?
아니요, 사용자가 문제에 대해 발언권이 없다는 것이 정확 해집니다.
종료 호출이 없으면 스크립트가 종료되는 정확한 시점 / 시간은 두 가지 요소로 귀결됩니다.
- 클라이언트 브라우저가 리디렉션에 반응하는 속도
- 나머지 스크립트를 실행하는 데 걸리는 시간입니다.
브라우저가 Location 헤더가 나오는 순간 리디렉션 작업을 즉시 시작한다고 가정 해 보겠습니다. 즉, 리디렉션이 발생하는 연결을 종료하므로 새 위치에 연결할 수 있습니다. 이것은 일반적으로 웹 서버가 리디렉션 스크립트를 종료 함을 의미합니다. 그러나 헤더가 서버-> 클라이언트에서 이동하고 TCP 링크 종료 프로세스가 클라이언트-> 서버에서 이동하는 데 걸리는 시간은 스크립트가 계속 실행될 수있는 시간입니다.
'programing' 카테고리의 다른 글
mysql 테이블 열 기본값을 어떻게 변경합니까? (0) | 2021.01.14 |
---|---|
두 가지 요소 중 하나가 있으면 무언가를하십시오. (0) | 2021.01.14 |
LINQ to SQL은 더 이상 사용되지 않습니까? (0) | 2021.01.14 |
Java에서 인터페이스가 필요한 이유는 무엇입니까? (0) | 2021.01.14 |
Html.EditorFor additionalViewData (0) | 2021.01.14 |