Upgrade to Pro — share decks privately, control downloads, hide ads and more …

seccamp_2022ブラウザ課題発表

takumma
September 01, 2022

 seccamp_2022ブラウザ課題発表

セキュリティキャンプ全国大会2022 B(Web セキュリティ)クラスの、「B1 作って学ぶ、Webブラウザ」の講義内で課題発表として使用したブラウザ(特にHTTP ヘッダと HTTP ステータスコード)に関する資料。

takumma

September 01, 2022
Tweet

More Decks by takumma

Other Decks in Technology

Transcript

  1. ヘッダーの実装のはなし - 経緯 経緯としてはf c 課題4の 302 Redirect の実装をしてた` c

    302 の時は、Location ヘッダに書かれてる URL にリダイレクトする` c ヘッダを読むために、少しいじる必要があった。 (やさしいコメント)
  2. Fetch Standard を覗いてみると...? g Headers クラスで定義されてる。(Not List<Header>V g Set-Cookie のことが考慮されてるe

    g ヘッダーの状態を表して、変な処理から守る Guard があるe g Response から帰ってきたヘッダーの String を投げてまとめて作ろうと 思ったけど、仕様をみると append とかしかないんだなぁ。 https://fetch.spec.whatwg.org/#headers-class
  3. Chromium の実装とかをみると F Fetch Standard で定義されている以外のメソッドが便宜上のために作ら れてたりするB F 仕様で定義されてる関数名と違ったりもするB F

    実装を見て気がついたけど、仕様にはちゃんと処理の手順が乗ってるB F でも割と中身はゆとりがあったりもする(処理を追加してもいい! F ガチガチに制約が固められている訳ではない? https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/ fetch/headers.cc;l=152 https://fetch.spec.whatwg.org/#ref-for-concept-headers-guard⑦
  4. ステータスコードのはなし a 302 の実装をやった派生で、他のステータスコードについても調べて みることにE a そういえば、418 I’m a teapod

    はどうなったんだっけ& a 定義されてないステータスコードが返されたらどんな挙動になるんだ ろう?
  5. ステータスコードのはなし いろんな仕様や定義を調べてみると„ d ステータスコードは 100 ~ 599 の間で定義されてるP d 仕様されてないものは、「Unassigned」となってたP

    d 範囲外のものに関しては、ブラウザでは RangeError が投げられるよう になってたP d Chromium でもそういう実装が見られたP d 418 は unused になってる。 https://fetch.spec.whatwg.org/#headers-class https://www.iana.org/assignments/http-status-codes/http-status-codes.xml
  6. 全体的な感想 ステータスコードとかヘッダとかはで仕様で決まっているものが列挙型 (Enum)で定義されているのかなと自分は思ってた。 でも実際はs ‰ 特定の特殊文字をバリデーショ` ‰ 範囲を超えたらエラーを出す(範囲に収まっていれば許す) それによってs ‰

    フレームワークやライブラリ等で独自のヘッダを追 ‰ nginx や aws などで独自のステータスコードを追加 Web の自由度を担保しながらも、秩序が守られるように仕様が 決められてるんだなあと感じた(ふんわり)。 https://en.wikipedia.org/wiki/List_of_HTTP_status_codes