[Web Server] Browser security, CORS
4672 ワード
Browser security
CORS
ブラウザが脅かされているのは、JavaScriptを駆動し、多くのJavaScriptを使用できるからです.
クライアントがサーバを信頼していることによる問題. サーバがスクリプトタグ間にコードを挿入して(スクリプト注入)ブラウザに送信すると、ブラウザはこのコードを実行します. 基本的なXSS攻撃はブラウザで阻止できます. サーバがクライアントを信頼していることによる問題. サーバは認証情報を持っていて信じています.ユーザーが認証情報としてハッカーのリンクをクリックすると、ハッカーは認証情報をキャプチャし、サーバに要求を送信します.
Cross-Origin Resource Sharing
CORSはHTTPヘッダを使用するメカニズムであり、異なるソース(サーバ)間のHTTP requistを許可する標準である.
HTTPリクエストは基本的にサイト間HTTPリクエストが可能である.これは.
Webサイトが他のドメインに存在するリソース(画像、スクリプト)を参照できることを示します.
しかし、セキュリティ上の理由から、ブラウザは
たとえば、スクリプトを使用してユーザーを悪意のあるサイトにリダイレクトできます.ブラウザは基本的に同じソースポリシーなので、自動的にブロックされます.
そのため,サーバ開発者はCORSを理解し,仕様に従ってHTTP要求に応答する必要がある.
かつては1つのサイトで1台のサーバしか使用されていなかったが、現代になってAJAXの登場に伴いfront-serverが使用され、2台のサーバが使用されるようになった.CORSが必要です.
CORS規格はHTTPヘッダに新しいヘッダを追加し,サーバにその情報を利用できるサーバリストを持たせる.
また、CORS規格では、HTTPリクエストがサーバに副作用を及ぼす場合(主にGET以外のリクエスト)にブラウザがリクエストを発行する前に「preflight」を発行するように強制しています.
このリクエストの名前は
サーバが答えを送信すると、実際のリクエストが送信されます.
また、サーバは、クライアント要求に認証(クッキー、HTTP認証など)を含める必要があるかどうかを通知することもできる.
サーバがリクエストを許可しない場合、エラーが送信されます.セキュリティ上の理由でJavaScriptがエラーにアクセスできません.コードからはエラーが発生したことしかわかりません.
エラーの詳細を知りたい場合は、ブラウザのコンソールでのみ確認できます.
CORS preflightリクエストが発生しないリクエストを単純リクエストと呼ぶ.以下の条件を満たすと、簡単な要求になります.
method :
サーバは応答を送信します.
上のタイトルの意味は、サーバ上のリソースがすべてのサーバで使用できることです.(
リソースへのアクセスを制限する場合は、
preflightリクエストは、ブラウザがまず
次のMDN例では、
later
CORS
Browser security
ブラウザが脅かされているのは、JavaScriptを駆動し、多くのJavaScriptを使用できるからです.
XSS
CSRF
CORS
Cross-Origin Resource Sharing
CORSはHTTPヘッダを使用するメカニズムであり、異なるソース(サーバ)間のHTTP requistを許可する標準である.
HTTPリクエストは基本的にサイト間HTTPリクエストが可能である.これは.
<img src="other-domain.com">
,<script src="other-domain.com/script.js">
Webサイトが他のドメインに存在するリソース(画像、スクリプト)を参照できることを示します.
しかし、セキュリティ上の理由から、ブラウザは
<script></script>
に囲まれたスクリプトによって生成されるcross-origin HTTP requestを制限している.例えば、XMLHttpRequestまたはFetch APIはSame-Originポリシーに従うため、正しいCORS Headerが含まれていない限り、他のソースに要求することはできません.たとえば、スクリプトを使用してユーザーを悪意のあるサイトにリダイレクトできます.ブラウザは基本的に同じソースポリシーなので、自動的にブロックされます.
そのため,サーバ開発者はCORSを理解し,仕様に従ってHTTP要求に応答する必要がある.
かつては1つのサイトで1台のサーバしか使用されていなかったが、現代になってAJAXの登場に伴いfront-serverが使用され、2台のサーバが使用されるようになった.CORSが必要です.
同じサーバ上の条件
http://mozila.org:8080
プロトコル(http
)、domain(mozila.org
)、port(8080
)が同じであれば、同じサーバ(原点).CORSの仕組み
CORS規格はHTTPヘッダに新しいヘッダを追加し,サーバにその情報を利用できるサーバリストを持たせる.
また、CORS規格では、HTTPリクエストがサーバに副作用を及ぼす場合(主にGET以外のリクエスト)にブラウザがリクエストを発行する前に「preflight」を発行するように強制しています.
このリクエストの名前は
OPTIONS
で、このリクエストによってサーバにどのようなHTTPメソッドを送信することができます.サーバが答えを送信すると、実際のリクエストが送信されます.
また、サーバは、クライアント要求に認証(クッキー、HTTP認証など)を含める必要があるかどうかを通知することもできる.
サーバがリクエストを許可しない場合、エラーが送信されます.セキュリティ上の理由でJavaScriptがエラーにアクセスできません.コードからはエラーが発生したことしかわかりません.
エラーの詳細を知りたい場合は、ブラウザのコンソールでのみ確認できます.
CORS操作方式
1. Simple requests
CORS preflightリクエストが発生しないリクエストを単純リクエストと呼ぶ.以下の条件を満たすと、簡単な要求になります.
method :
GET
, HEAD
, POST
Content-Type : application/x-www-form-urlencoded
, multipart/form-data
, text/plain
その他省略https://foo.example
という名前のWebサイト(サーバ)がhttps://bar.other
という名前のサーバに要求した場合:サーバは応答を送信します.
Access-Control-Allow-Origin: *
スタイルのあるタイトル.上のタイトルの意味は、サーバ上のリソースがすべてのサーバで使用できることです.(
*
は皆さんのご希望です)リソースへのアクセスを制限する場合は、
*
の代わりにurlを使用します.2. Preflight requests
preflightリクエストは、ブラウザがまず
OPTIONS
でリクエストを発行し、サーバにリクエストを送信できるかどうかを尋ねるものである.METHODまたはContent-Typeが上記の単純な要求条件を満たしていない場合、ブラウザは自動的にpreflight要求を発行します.次のMDN例では、
POST
、X-PINGOTHER
、およびContent-Type : application/xml
の要求が送信されるので、preflight要求が最初に送信される.Access-Control-Allow-Origin: http://foo.example // 허용할 origin
Access-Control-Allow-Methods: POST, GET, OPTIONS // 허용할 method
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type // 허용할 header
Access-Control-Max-Age: 86400
// preflight request 를 cache 에 저장할 수 있는 시간 (단위: 초)
3. Request w/ credentials
later
Reference
この問題について([Web Server] Browser security, CORS), 我々は、より多くの情報をここで見つけました https://velog.io/@jhoryong/Web-Server-기초テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol