PHP 웹 프록시 탐색: 상대 URL, 쿠키, 오리진
PHP 가져오기를 브라우저 대상 웹 프록시로 바꿀 때 리소스 URL, 탐색, 쿠키, 오리진 경계를 설계합니다.
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과 오리진 모델을 보존합니다. 별도의 공개 사이트 시험에는 무료 프록시 목록이 후보 엔드포인트를 제공합니다. 브라우저 설정에서 프로토콜을 맞추십시오.