_px3 クッキーとは結論から: _px3 は PerimeterX(現 HUMAN Security)が、センサー検査を通ったブラウザに発行するクッキーです。サイトが持つ鍵で暗号化されたペイロード、ペイロード内部の短い失効時刻、そして HMAC 署名を持ちます。別クライアントへコピーできるセッショントークンではありません。署名はペイロード全体を覆っており、サーバーは独自のスケジュールで再署名します。
_px3 の値はコロン区切りの 4 部分です。暗号化ペイロード、タイムスタンプ、ハッシュ、署名。実務で効くのはこの 3 点です。
| 部分 | 何を決めるか |
|---|---|
| 暗号化ペイロード | PerimeterX がそのセッションについて計算したスコア、発行先の IP と User-Agent、_pxvid に結びつく UUID を含みます。 |
| タイムスタンプ | 発行時刻。どれだけ新鮮と見なすかはサイトのポリシーが決めます。 |
| 署名 | サイト固有の鍵によるペイロード全体の HMAC。書き換えると壊れるので、低いスコアを高いスコアに編集することはできません。 |
ここで大半の実装が壊れます。サーバーがクッキーに付ける Expires と、ペイロードに焼き込まれ、サーバーが独自に適用する寿命は別物です。両者は一致する必要がありません。Expires が 2 時間先でも、ペイロード側は発行時刻から測った TTL の終わりに近いことがあります。サーバー側の TTL は発行時点から測るのであって、最後に使った時刻からではありません。
ブラウザが捨てるまでクッキーを使い回すと、その窓の後半は「ジャーには有効に見えるのに、応答はチャレンジになる」時間になります。直し方は Expires 属性を読むことではなく、毎回のレスポンスの Set-Cookie を見て、ジャーの項目を無条件に差し替えることです。
_pxvid と _pxhd が一緒に移動します。_pxvid を欠いた _px3 は、エッジが参照できないセッションに対する署名でしかありません。実ブラウザで通す場合の最小形です。要点は、クッキー単体ではなくコンテキストごと保持すること、そして期限を待たずに毎回の Set-Cookie を反映することです。
ctx = browser.new_context(proxy=PROXY) # 出口は固定 page = ctx.new_page() page.goto(url) # ここでセンサーが走る jar = await ctx.cookies() # _px3 と _pxvid が揃う # 403 や captcha ページが出たら、同じコンテキストでナビゲートし直す。 # Expires を見て待つのではなく、Set-Cookie のたびにジャーを差し替える。
PerimeterX には、一部の連携で使われるサーバー間トークンの流れがあります。その経路は HUMAN の API で直接検証されるトークンを返し、ブラウザ側のクッキーをまったく必要としません。テストを許可されているサイトが対応しているなら、クッキージャーよりはるかに安定します。両モードを SolveHub の API がどう出しているかは PerimeterX のエンドポイント にまとめています。
s2s が提供されていない場合の誠実な選択肢は 2 つです。実ブラウザでセンサーを動かし、ジャー全体とネットワーク同一性を保持する。あるいは、対象 URL 用の有効な _px3 を解決 API から取得する。ペイロードを自分で再生成するのは、難読化された回転スクリプトとサイトの鍵を再実装するということで、引き受ける価値のある保守負担ではありません。
_pxvid ― 訪問者 ID。_px3 のペイロードがこの値に結びつきます。_pxhd ― HttpOnly で _pxvid に紐づく。多くのプロパティで _px3 と並んで必須です。pxcts ― 短命のチャレンジトークン。常に回転します。_pxde ― センサー実行中に置かれる遅延クッキーのプレースホルダ。_px3 のペイロードは復号できますか。 実用にはなりません。サイトが管理する鍵で暗号化されているので、分かるのは長さだけです。クライアント側に鍵はありません。
失効前に動かなくなるのはなぜですか。 サーバーが発行時点から独自の寿命を適用しており、それがクッキーの Expires より短いことがあるためです。Set-Cookie のたびにジャーの項目を差し替えてください。
別の IP からでも _px3 は通りますか。 長くは通りません。ペイロードには発行セッションの IP と User-Agent が記録されており、機械の速度で要求するセッションは次の再署名で再評価されます。
_px3 と _pxvid はどちらも必要ですか。 多くのサイトでは両方です。_px3 単体では、エッジが参照できないセッションへの署名になります。
スコアを上げる方法はありますか。 ペイロードの編集はできません。署名が壊れます。スコアはセッションの振る舞いから計算されるので、実ブラウザで通すか、解決 API から新しい値を得るのが現実的です。