ハイライト
ブラウザプロファイルの選択が、requestごとに設定可能になりました。希望するブラウザとOSを指定すると、fingerprintとheaderがそれに合わせて構成されます。今週、SingleはBrowserを起動することなく、新たに2つの防御(SiteGroundのSG-CaptchaとeBayのArgon2チャレンジ)を解決できるようになりました。また、DashboardのActivityビューには、背後で実行された処理ではなく、要求した内容そのものが記録されるようになりました。
新機能
requestごとのブラウザプロファイル選択
これまで、unblocker: trueは1つのシグネチャ(当時のデフォルト値)を選択するのみでした。今後は任意のものをご指定いただけます:
{ "url": "https://example.com", "unblocker": true, "profile": "firefox147" }
または、ブラウザとOSのペアを指定します:
{ "url": "https://example.com", "unblocker": true, "browser": "Chrome", "os": "Windows 10" }
APIは未知の組み合わせを名前で拒否し、利用可能なものをリストするため、タイプミスによって意図しないシグネチャが静かに送信されることはありません。
完全なカタログはGET /api/profilesにあります。これはシークレットではなく機能リストであるため、公開されています(キーは不要)。執筆時点で、Windows、macOS、Android、iOS上のChrome、Firefox、Edge、Safari、Torにわたる79のプリセットがあります。Playgroundも同じリストから読み取るため、ドロップダウンにはコードが要求できるものが常に正確に表示されます。
重要な理由: ターゲットがOSによってリクエストをプロファイリングしている場合や、どのスタックが特定の壁を通過するかをチームがA/Bテストしている場合、他のすべてが変化する中でその変数を一定に保つことができます。
SingleがSG-CaptchaとeBayのProof-of-Workをクリア
以前はBrowserを経由する必要があった2つの防御が、Singleでクリアできるようになりました。eBayは独自のProof-of-Workチャレンジ(Argon2パズル)を提供し、SiteGroundは共有ホスティングWebの一部をSG-Captchaで保護しています。どちらもレンダリングせずに解決するため、responseは単一のHTTP requestの形で返され、それに応じた価格設定になります。
responses内の防御シグナルも増加しました。Browser responsesにはdefenses: { present, cleared }が含まれるようになったため、どのベンダーがページの前段に配置されているか、そして私たちが通過できたかを確認できます。課金も同じルールに従います。ブランドに関係なく、クリアしたベンダーが属性付けされます。この変更前はCloudflareが唯一の有料解決策でした。Akamai Bot Manager、SG-Captcha、eBayのチャレンジがこれに並びました。
DashboardのActivityビューの再構築
DashboardのActivityリストの2つの列が間違った内容を表示していました。HTTPメソッドはすべての行で常にPOSTとなっていました(すべてのendpointsはPOSTであるため、この列は何も伝えない定数でした)。また、Playground呼び出し時のクライアントIPには、Runをクリックした人ではなく、Playgroundがどこから呼び出したかが記録されていました。
両方とも修正されました。メソッド列には、request body内で送信した動詞が表示されるようになりました。Playgroundの行のクライアントIPには、サインインしたユーザーのブラウザIPが表示されるようになりました。これは署名されたPlayground token内に保持されるため、APIクライアントが偽装することはできません。
同時にビューの他の部分も再構築されました。テーブルは列を隠すことなくノートパソコンの画面に収まり、製品列はリクエスト行に折りたたまれます。詳細パネルにはタブが追加され、request、response、防御サマリーがそれぞれ個別にスクロールできるようになりました。
課金: プラン変更時の3Dセキュア
(初回登録時だけでなく)プラン変更時にカード発行会社が3DSの確認を要求した場合、そのステップが実行されず、変更が密かにロールバックされていました。現在は実行されます。先月プランを変更しようとして何も起きなかったように見えた場合、これが理由です。
舞台裏
Playgroundは、取得したサイトのデータからresponse headerを構築することを拒否します(早期に発見したヘッダーインジェクションクラスのバグ)。Dashboardの課金endpointは、応答する前に呼び出し元がリソースを所有していることを検証し、IDORパスを閉じます。
6日の障害でビルド中にデプロイホストのディスクが満杯になった後、デプロイパイプライン自体に約1週間にわたる修正を実施した。各サービスはディスク容量に余裕がない場合はビルドを拒否し、デプロイは競合せず直列化され、バックエンドが不安定な場合でもゲートウェイは稼働し続ける。また、サービスは30秒後に強制終了されるまでハングアップするのではなく、SIGTERMで適切に終了するようになった。
長い間、「どのブラウザシグネチャを使用するか」は我々がユーザーに代わって決定してきた。しかし、そうである必要はない。