PHP 가져오기에 더 많은 재작성을 추가하기 전에 다음 리소스가 어디로 가야 하는지 정하십시오. https://destination.example/catalog/ 에서 가져와 https://viewer.example/browse?url=... 에서 반환한 문서에는 다음이 있을 수 있습니다.

<img src="photo.jpg">
<a href="details/42">Details</a>

브라우저는 뷰어에서 받은 문서를 기준으로 그 참조를 해석합니다. PHP가 원본 바이트를 가져왔다고 해서 원격 기준이 성립하지는 않습니다.

base 요소로 상대 URL을 대상으로 향하게 할 수 있지만, 그 요청은 이후 브라우저에서 대상으로 직접 갈 수 있습니다. 대신 모든 요청을 PHP를 거치게 하려면 프록시 URL과 더 넓은 라우팅 모델이 필요합니다.

리소스 또는 동작필요한 처리
링크와 이미지원격 문서를 기준으로 해석하고 의도한 경로를 만든다
CSS 가져오기와 리소스스타일시트의 원격 기준을 쓴다
폼메서드와 제출 데이터를 보존한다
리디렉션탐색을 허용된 모델 안에 둔다
스크립트가 만든 요청원본 HTML에 없는 URL을 처리한다

몇 가지 정규식 치환으로는 스크립트가 많은 사이트와의 일반 호환성을 보장할 수 없습니다. 알려진 공개 문서라면 탐색을 끄거나 직접 링크를 허용하거나 지원되는 하위 집합만 뷰어를 통해 보내는 것으로 충분할 수 있습니다. 모든 응답을 HTML로 취급하지 말고 실제 미디어 타입을 보존하십시오.

자기 도메인에서 신뢰할 수 없는 마크업을 반환하면 가져온 사이트의 정체성이 아니라 뷰어의 브라우저 오리진이 부여됩니다. 그런 문서는 계정 및 관리 페이지와 분리하십시오. 방문자별 원격 쿠키, 전달이 허용된 헤더, 리디렉션 대상을 정의하십시오. 공유 쿠키 항아리는 원격 로그인을 섞을 수 있습니다.

탐색 세션을 제공하기 전에 그 지원 경계를 확정하십시오. 다른 출구를 통한 일반 탐색이라면 브라우저의 기본 프록시 인터페이스, 예컨대 Firefox의 HTTP/SOCKS 설정이 이 가져오기-재게시 계층 없이 브라우저의 대상 URL과 오리진 모델을 보존합니다. 별도의 공개 사이트 시험에는 무료 프록시 목록이 후보 엔드포인트를 제공합니다. 브라우저 설정에서 프로토콜을 맞추십시오.

관련 글