TIL [Browser Security Model]



CORS (Cross-Origin Resource Sharing)


CORSは「クロスソース資源を共有する」という意味だ.ここで、「ソース」(Origin)は、アクセス時に使用するURLのシナリオ(プロトコル)、ホスト(ドメイン)、ポートとして定義されます.両方のオブジェクトのスキーマ、ホスト、ポートが一致している場合は、同じソースがあると言えます.
ソースが異なる場合、例えばhttps://domain-a.comのフロントエンドJavaScriptコードではXMLhttpRequest要求https://domain-b.com/data.json乙、乙が使用され、両者のソースが異なるため、「クロスソースリソース共有」と呼ぶことができる.
私たちがよく使うXMLHttpRequestとFetch APIは、同じソースポリシーに従います.これは、APIを使用するWebアプリケーションが同じソースからのリソースしかロードできないことを意味し、別のソースからのリソースをロードするには、正しいCORSヘッダを含む応答を返さなければならないことを意味します.

CORSメカニズムは、ブラウザとサーバ間の安全なクロスソース要求とデータ転送をサポートします.すなわち,2つのソースの異なるデータ間で交換を行う場合,より安全なためにCORS機構が存在する.

1.同一ソースからの例

http://example.com/app1/index.html
http://example.com/app2/index.html
上記の場合、ホスト(http)と一致するため、同じソースと言える.
http://Example.com:80
http://example.com
上記の場合、同じスキーム(http)を有し、httpのデフォルトポートは80であるため、ポートも同じである.

2.その他のソースの例

http://example.com/app1
https://example.com/app2
上記の場合、シナリオ(http)は異なります.
http://example.com
http://www.example.com
http://myapp.example.com
上記の場合、ホスト(example.com)は異なります.
http://example.com
http://example.com:8080
上記の場合、ポートが異なります.

3.CORSエラー


CORSに異なるブラウザからのデータを送信し受信する過程で、ドメイン名の異なるサイト(ソースが異なる)と言える.間でAPIが要求された場合、共有が設定されていない場合、エラーが発生します.
1)ドメイン(ドメイン)
ドメイン名は簡単に言えばIPアドレスの名前です.IPアドレスは数字、例えば115.68.24.88で、覚えにくいのでnaverを文字で置き換えます.comと一緒に交換しました.
daum.co.kr
daum:コンピュータの名前
co:国/地域を表すトップドメイン
kr:韓国NICが管理するドメインを示す
2) URL

  • プロトコル:URLはリソースにアクセスするようにStreamで始まります.通常のシナリオに比べて、プロトコル呼び出しの回数が多い.プロトコルは、Web上のサーバとクライアントの間でリソースをどのように交換するかを示す通信規約です.私たちが最もよく使うプロトコルはhttpとhttpです.現在httpsを基本プロトコルとして使用しており、httpよりもセキュリティの高いバージョンはhttpsです.

  • ホスト:URLにWebサーバの場所を指定します.ドメイン名またはIPアドレスを使用できます.

  • パス:ルートリソースを「/」で表します.例:
  • http://www.example.com/ 
    https://www.example.com/robots.txt

    3.CORSエラーの解決方法


    ブラウザにドメイン名の異なるサイトがある場合は、設定によってCORSエラーを解決できます.データのAPI要求を送信および受信する際には、送信要求の一方の要求ヘッダと受信要求の一方の応答ヘッダに特定の値を設定することができる.

    上図のfoo.comはbarです.comにリクエストを送信するので、リクエストヘッダにoriginがあります.逆方向でしょうcomでfoo.応答はcomに送信されるため、応答ヘッダにAccess Control Allow-Originを含める必要があります.リクエストヘッダとレスポンスヘッダの値が同じ場合、access-control-allow-originの値はfooです.comの代わりに*を使用できます.この場合、すべてのソースのリソース交換が許可されます.

    4. GET vs POST, PUT, DELETE


    GETリクエストとは異なり、POST、PUT、DELETEリクエストにはサーバリソースへの変更が含まれる場合があります.COS宣言では、ブラウザがサポートメソッドを要求するためにOPTIONSメソッドとして事前にハイライトし、サーバが許可されていないときに実際のリクエストを送信するように要求しています.

    これがPOST,PUT,DELETEなどの要求に対する解決策である.preflightリクエストによってPUTメソッドが通知された場合、サーバは応答によってPUTメソッドが利用可能かどうかを通知します.

    XSS (Cross-site Scripting)


    XSSはセキュリティ脆弱性であり,攻撃者がクライアントに悪意のあるコードを注入する攻撃である.通常、XSSはWebアプリケーションで発見されます.悪意のあるコードが注入されたWebアプリケーションは他のユーザーに見られるため、リスクが大きい.XSSはWeb上で多くの敏感なデータを処理し、小さな悪作劇から巨大な安全上の危険性まで、多様な役割を果たすことができる.多くのサイトはXSS攻撃に対して防御措置を取らずに攻撃を受けることが多い.

    CSRF (Cross-site Request Forgery)


    CSRFは、攻撃者が自分の電子メールアドレスを変更したり、パスワードを変更したりして、攻撃者が変更後の電子メールを使用できるようにするなど、被害者が嫌がる行為をするネットワーク窃盗行為です.被害者がアプリケーションに権限を持っている場合、攻撃者はその権限を自分の権限に変えて、アプリケーションを好きなように操作することができます.