PHP Webプロキシのナビゲーション:相対URL、Cookie、オリジン
PHPでの取得をブラウザ向けWebプロキシに変えるとき、リソースURL、ナビゲーション、Cookie、オリジンの境界を設計します。
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として扱うのではなく、実際のメディアタイプを保ってください。
自分のドメインから信頼できないマークアップを返すと、取得したサイトの識別ではなく、ビューアのブラウザオリジンが与えられます。そうした文書はアカウントや管理のページから隔離してください。訪問者ごとのリモートCookie、転送を許可するヘッダー、リダイレクト先を定義します。共有のCookieジャーはリモートのログインを混在させます。
閲覧セッションを提供する前に、そのサポート境界を確定してください。別の出口での通常の閲覧なら、ブラウザ本来のプロキシ設定、たとえばFirefoxのHTTP/SOCKS設定が、この取得と再公開の層を必要とせずに宛先URLとオリジンのモデルを保ちます。別個の公開サイトの試験には、無料プロキシ一覧が候補のエンドポイントを提供します。ブラウザ設定のプロトコルを合わせてください。