本記事について
この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。
CORS
オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS ) は、追加のHTTPヘッダーを使用して、あるオリジンで動作しているウェブアプリケーションに、異なるオリジンにある選択されたリソースへのアクセス権を与えようウェブアプリケーションは、自分とは異なるオリジン (ドメイン、プロトコル、ポート番号) にあるリソースをリクエストするとき、オリジン間HTTPリクエストを実行します。
オリジン(Origin)
Originとは
<scheme> "://" <hostname> [ ":" <port> ]
例
scheme: https,http
hostname: google.comなど
post : 443など
これがすべて同じになるのが同一オリジンとみなされる
Cross
オリジン単位でのアクセス制御可能
Requestは送信できるが、Responseは受け取れないなどの制限をかけれる
XSS
クロスサイトスクリプティング(XSS)とは、Webサイトの脆弱性を利用し、記述言語であるHTMLに悪質なスクリプトを埋め込む攻撃です。クロスサイトスクリプティングの英語表記「Cross Site Scripting」の略称として「XSS」と表記する場合もあります。
- 不正なサイトに誘導されアクセス
- 不正なJavaScript codeが実行される
- 被害者のブラウザのCookieを読み取られて外部に送信されお供養される
対策
httpOnlyと言うCookieの属性があり、それをtrueにすることでJavaScriptから読み取れなくする。
CSRF
クロスサイトリクエストフォージェリ(CSRF)とは、Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことです。掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまいます。
- 不正なサイトに誘導されアクセス
- Cookieが自動送信されるので不正なDB操作などが行われる(不正書き込みなど)
対策
正規サイトからのリクエストが判別する仕組みが必要
CSRF Tokenを使う
CSRF Token
- 正規サイトアクセス時にServerからCSRF Tokenを発行する
- GET:api/csrf_token
- DB操作(Create,put,Delete)request時に、headerにCSRF Tokenを付与する。Server側で正規のリクエストか検証する。
- 外部サイトからCSRF Token発行requestをしてもCORSによりResponseを読みれない。
SameSite
SameSiteというのはCookie設定の1つの属性となります。
SameSiteには3つの設定を行うことが可能です。
None、Lax、Strictの3つとなります。
セキュリティレベルの高さの指定となり、None(なし)、Lax(緩い)、Strict(厳しい)の順番でセキュアに対するセキュリティレベルを示しています。
シングルアプリケーションの場合はNoneにしてCookieの送受信を可能する
Secure:true -> httpsで暗号化された通信のみCookie使用可能
参考