# Webブラウザセキュリティ ## 1章 WebとWebセキュリティ ## 2章 Originを境界とした基本的な機構 ### 2.1 Webリソース間の論理的な隔離に向けて * 単語覚えないとな * SOP(Same-Origin Policy)  * XSS(Cross-Site Scripting) * CSP(Content Security Policy) * 制限の枠組み * ブラウザ内アクセス * jQueryとかのDOM操作あたりかな * ネットワーク越しアクセス * \<a\>,\<form\> * fetchAPI, XMLHttpRequest * 埋め込み * \<iframe\>, \<img\> #### ブラウザ内アクセス 例えば、WebAとWebBが同じstorageを使えるようだと、悪意サイトを開いた時に攻撃を受ける可能性があるのでなんらかの制限が必要 ここでは言及がないから別の項目に期待 >[name=kos ot]弁コムはcsrf対策でXMLHttpRequestをのヘッダにtoken入れていたような気がするけど、fetchの場合ってどうなんだっけ? #### ネットワーク越しアクセス ##### 単純リクエスト \<a\>,\<form\>のような自然発生するようなHTTPリクエスト 昔から存在するページ遷移のことかな? [単純リクエスト](https://developer.mozilla.org/ja/docs/Web/HTTP/CORS) > リクエストによっては CORS プリフライトを引き起こさないものがあります。これをこの記事では「単純リクエスト」と呼んでいます・・・ フォーム method https://developer.mozilla.org/ja/docs/Web/HTML/Element/form#attr-method Access-Control-Allow-Origin Allow(アラウ) slimでは、PUT、DELETEメソッドは許可してあげる必要がある。 https://www.slimframework.com/docs/v3/cookbook/enable-cors.html 単純でないリクエストに対しては制限が課されるべきとは? fetchAPIとか、XMLHTTPRequestのことだよね。多分、、 プリフライトリクエスト [CORS](https://bengo4com.esa.io/posts/7471) #### リソース埋め込み CSP周りで話が出るらしい 一旦考えなくていいらしい ### リソース境界 CORSの話っぽいけど違うのか。 中間者攻撃(Man-in-the-middle Attack)の被害になるとあるが、これじゃない気が・・・ 中間者攻撃は暗号通信の話だと思うので、TLSとかVPNとかの話だと思うんだけれども。。 >https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/202.html >中間者攻撃とは、攻撃者がクライアントとサーバとの通信の間に割り込み、 >クライアントと攻撃者との間の通信を攻撃者とサーバとの間の通信として中継することによって >正規の相互認証が行われているようにしてセキュリティを破る攻撃手法である。 > [name=kos ot] > 中間者攻撃ってなんだ? 例がよくわからない [同一OriginPolicy](https://bengo4com.esa.io/posts/7144#%E5%90%8C%E4%B8%80%E3%82%AA%E3%83%AA%E3%82%B7%E3%82%99%E3%83%B3%E3%81%A6%E3%82%99%E3%81%82%E3%82%8B%E6%9D%A1%E4%BB%B6)定義は、(スキーム、ホスト、ポート番号)だな ### 2.2 Origin と Same-Origin Policy(SOP) > [name=Masato Yoshioka] [RFC6454 Web 生成元の概念](https://triple-underscore.github.io/RFC6454-ja.html) (スキーム、ホスト名、ポート番号)の3つの組として定義される値。 厳密には、[tuple origin](https://html.spec.whatwg.org/multipage/origin.html) opaque origin も種類もある。 SOP (Same-Origin Policy) ある2つのWebリソースのOriginが一致している = Same-Origin ある2つのWebリソースのOriginが異なる = Cross-Origin SOP |リソース間の関係| 操作 | 制限| |-|-|-| |Same-Origin|ブラウザ内アクセス| 制限しない| |Same-Origin|ネットワーク越しアクセス| 制限しない| |Same-Origin|埋め込み| 制限しない| |Cross-Origin|ブラウザ内アクセス| ほぼ禁止| |Cross-Origin|ネットワーク越しアクセス|単純リクエストはOk,それ以外は禁止| |Cross-Origin|埋め込み| 制限しない| [サンプルコード](https://github.com/MasatoYoshioka/web-security) ### 2.3 CORS(Cross-Origin Resource Sharing) SOP (Same-Origin Policy)の制約を緩和するためにCORSが提供する2つの機能 - Cross-Origin なリソースへのブラウザ内アクセスの許可 - Access-Control-Allow-Origin ヘッダ - Origin が含まれている or 任意の Origin(*) - Cross-Origin なリソースへのネットワーク越しのアクセスの許可 - 「単純ではない Cross-Origin なリクエスト」が発行されそうになったときに以下のような挙動をする機能 1. プリフライトリクエストを発行する 2. プリフライトリクエストへのレスポンスが以下の全てを満たしている場合に、元々発行したかったリクエストを発行する - Access-Control-Allow-Origin - Access-Control-Allow-Methods - Access-Control-Allow-Headers ### 2.4 CORSを用いないSOPの緩和方法 ### 2.5 SOP の天敵、XSS(Cross-Site Scripting) ### 2.6 CSP (Content Security Policy) ### 2.7 Trusted Types ### 2.8 まとめ ## 3章 Webブラウザのプロセス分離によるセキュリティ ## 4章 Cookie に関連した機構 ## 5章 リソースの完全性と機密性に関連する機構 ## 6章 攻撃手法の発展