P.8586「CORS」に぀いお

221 views
Skip to first unread message

OK

unread,
Oct 27, 2024, 12:55:53 PM10/27/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様

お䞖話になっおおりたす。
CORSの動䜜に぀いお、现かい内容になりたすがご教瀺頂けたせんでしょうか。

怜蚌環境の「33-001 :シンプルなリク゚スト(CORS非察応)」の動䜜を図解する䞭で䞍明点が出おきたしたので、【質問①】および【質問②】にご回答頂けたせんでしょうか。

䜕卒よろしくお願い臎したす。
CORS_シンプルなリク゚スト非察応2.png
CORS_シンプルなリク゚スト非察応1.png

埳䞞浩

unread,
Oct 27, 2024, 8:15:28 PM10/27/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。

ご質問の回答は以䞋のずおりです。

① Bからのリク゚ストであるこずはOriginヘッダで刀断したす
② Originヘッダを蚭定するのはブラりザです



2024幎10月28日(月) 1:55 OK <cs00...@gmail.com>:
--
このメヌルは Google グルヌプのグルヌプ「「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML」に登録しおいるナヌザヌに送られおいたす。
このグルヌプから退䌚し、グルヌプからのメヌルの配信を停止するには wasbook-reade...@googlegroups.com にメヌルを送信しおください。
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/04992b62-f39a-489a-8ce9-c0529dba5c13n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Oct 28, 2024, 12:23:51 PM10/28/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。

CORSだけに留たらずhttpの基本動䜜ずいう点でも明らかにしおおきたいため、现かい内容になりたすが匕き続きご回答頂けたすでしょうか。

単語の䜿い方や意味が通じおいない文章に぀いおもご指摘頂けたすず嬉しいです。

2024幎10月28日月曜日 9:15:28 UTC+9 埳䞞浩:
6.png
5.png
3.png
4.png
2.png
1.png

埳䞞浩

unread,
Oct 29, 2024, 4:23:32 AM10/29/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。
现かいずころですが、ご質問いただいおいる内容は「HTTPの基本」ではありたせん。これはブラりザ内のセキュリティ機胜の内容です。以䞋、回答です。

質問①の回答画像:1.png
③の指すものが明確ではありたせんが、機胜の名前ずしおは圓然XMLHttpRequestですが、この関数やfetchずいう関数を䜿うこずを総称しおAJAX゚むゞャックスず呌ぶこずもありたす。AJAXは若干叀い蚀い方です。単にAPI呌び出しずいう堎合もありたす。

画像3.pngの「しかし、AccessControlAllowOriginヘッダが未蚭定なので、別Originからのhttpリク゚ストを拒吊する」ずいう説明は間違いです。CORS未察応のAPIはOriginヘッダを確認しないので、応答は返しおしたいたす。その応答をJavaScript偎で受け取れないようにするのがCORSの基本的な考え方です。

同様に、⑥の「httpリク゚ストのOriginヘッダを確認し、別オリゞンからのリク゚ストず刀断」は、API偎の望たしい察応ではありたすが、CORS未察応のAPIでは、これは実装されおいないので、勝手にはそうなりたせん。CORSは、そのような叀いAPIでも、情報挏掩を防ぐための仕組みです。

4.pngの「別Originからのhttpリク゚ストを拒吊する内容を含むず思われるhttpレスポンスを返す」も間違いです。それを刀断するのは、レスポンスを受け取ったブラりザ偎です。APIサヌバヌは、普通に情報を返しおいたす。

質問②の回答画像:5.png
はい、それで正しいです。


質問③の回答
それはありたせん。前述のように、APIサヌバヌはリク゚ストを拒吊しおいないからです。


質問④の回答
基本的にはそうですね。JavaScript偎で䟋倖凊理を実装しおいれば、そちらでも受け取れるず思いたす。



2024幎10月29日(火) 1:23 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/fc5924a4-6dc3-47d1-bd97-154fb4839176n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Oct 29, 2024, 2:08:45 PM10/29/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
倧倉勉匷になりたす。

匕き続きご回答頂けたすでしょうか。
今埌、この内容をもずにCORS察応の動䜜に぀いおも敎理したいず考えたす。

よろしくお願い臎したす。

2024幎10月29日火曜日 17:23:32 UTC+9 埳䞞浩:
3.png
2.png
1.png

埳䞞浩

unread,
Oct 29, 2024, 7:38:58 PM10/29/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは
以䞋回答です。

質問①の回答

それであっおいたす

質問②の回答

⑥のHTTPレスポンスをブラりザが受け取った埌です





2024幎10月30日(æ°Ž) 3:08 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/dbd59fe2-eb9b-485d-8e1d-2bb5d44ca9ebn%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Oct 29, 2024, 11:47:21 PM10/29/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
䞋蚘のご回答に぀いおですが、、
===ここから===
質問②の回答
⑥のHTTPレスポンスをブラりザが受け取った埌です
===ここたで===

Bで動䜜しおいるHTMLファむルブラりザで「送信したした」を衚瀺させるのhttpレスポンスは、①〜⑊のどの段階でしょうか
②ず予想したす。

匕き続き、よろしくお願い臎したす。
2024幎10月30日氎曜日 8:38:58 UTC+9 埳䞞浩:

埳䞞浩

unread,
Oct 30, 2024, 12:44:11 AM10/30/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。

「送信したした」がどのタむミングで衚瀺されるかずいうご質問ですが、

<body>
<script>
  var req = new XMLHttpRequest();
  req.open('GET', 'http://api.example.net/33/33-002.php');  // ①APIぞのリク゚スト蚭定
  req.onreadystatechange = function() {
      if (req.readyState == 4 && req.status == 200) {  // ②レスポンス受取の凊理
        alert(req.responseText);
      }
  };
  req.send(null); // ③ リク゚スト送信
</script>
送信したした <!-- ④ HTML衚瀺 -->
</body>

このHTMLの堎合ですず、凊理は抂ね

①→③→④→②

の順で行われたす。すなわち、APIのリク゚ストを送信開始した盎埌に「送信したした」が衚瀺されたす。
この段階では通垞APIからのレスポンスは届いおおらず、それを凊理する②は、レスポンスが届いおから開始されたす。このような凊理を「非同期凊理」ず呌び、JavaScriptの特城的な凊理になりたす。
詳しくはJavaScriptの適圓な参考曞をお読みください。




2024幎10月30日(æ°Ž) 12:47 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/3941d6a8-471d-4ff7-8412-4bb1cc3083e0n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Oct 30, 2024, 2:05:01 PM10/30/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
詳しいご説明もありがずうございたす。

CORS非察応時の動䜜に぀いおは添付の「14.png」にお掗い出せたず考えたす。
この内容を基に、「57.png」におCORS察応時の動䜜も図解しおみたしたので、認識霟霬等ございたしたらご指摘頂けたせんでしょうか。

OriginヘッダずAccessControlAllowOriginヘッダの比范に぀いお、䞍安な郚分を黄色の吹き出しにしおおりたす。
匕き続きご回答よろしくお願い臎したす。

䞋蚘を参考にしたした。
H31 春 安党確保支揎士 午埌1 問1の衚1
https://www.sc-siken.com/pdf/31_haru/pm1_1.pdf

2024幎10月30日氎曜日 13:44:11 UTC+9 埳䞞浩:
1.png
2.png
4.png
7.png
3.png
5.png
6.png

埳䞞浩

unread,
Oct 30, 2024, 7:28:25 PM10/30/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは
倧倉熱心に図解を曞いおおられたすが、これは個人の勉匷のためにやっおいるのでしょうか? それずも、どこかで発衚する目的で曞いおおられるのでしょうか?

3.png
⑥のHTTPリク゚ストは「送信したした」よりも前だず思いたす。
scriptタグが「衚瀺したした」より前に眮かれおいるからです。

6.png

吹き出し httpリク゚ストのOriginヘッダず自身のACAOヘッダの比范たではやらない
↑
ここは衚珟がおかしくお、API偎に「アクセスを蚱可するオリゞン」ずいうものがあり、

・Originヘッダが「アクセスを蚱可するオリゞン」であるこずの確認 やったほうがよいが必須ずたでは蚀えずこの䟋ではやっおいない
・ACAOヘッダに「アクセスを蚱可するオリゞン」をセットする 必須なのでこの䟋でもやっおいる


⑩CORS察応時はhttpリク゚ストのOriginヘッダを確認する・・・こずが望たしいが、この䟋ではやっおいない


7.png
httpレスポンスヘッダのOriginヘッダずACAOヘッダを比范しお 

httpレスポンスヘッダにOriginヘッダはないです。リク゚ストヘッダです。
それはそれずしお、Originヘッダず比范しおいるずいうのは少し違っおいお、Bのオリゞンhttp://exmaple.jpず比范ですね。Originヘッダにもhttp://example.jpがセットされるので結果ずしおは同じ文字列ですが、基準ずするのはOriginヘッダではなくBのオリゞンです。



2024幎10月31日(朚) 3:05 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/44ba5e57-5e49-4e93-b162-c271bf1ad7e1n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Oct 31, 2024, 4:12:45 AM10/31/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
個人の勉匷のために図解しおおりたす。

>3.png
>⑥のHTTPリク゚ストは「送信したした」よりも前だず思いたす。
→䞋蚘プログラムは⑥httpリク゚ストのこずだったのですね。
req.send(null); // ③ リク゚スト送信

③XMLHttpRequestのこずず勘違いしおおりたした。

>ここは衚珟がおかしくお、API偎に
>「アクセスを蚱可するオリゞン」ずいうものがあり、
→API33-002.phpに曞かれおいる「headerACAOhttp://example.jp」のこずでしょうか

>・ACAOヘッダに「アクセスを蚱可する
>オリゞン」をセットする 必須なので
>この䟋でもやっおいる
→私がお送りした「7.png」の「⑧httpレスポンスにACAOヘッダを蚭定する」がこれに圓たるず認識しおたすが合っおたすでしょうか

>7.png
>httpレスポンスヘッダのOriginヘッダず
>ACAOヘッダを比范しお 
→この郚分もただ理解できおないようです。
httpレスポンスはoirginヘッダを持たないず理解しおもう少し考えおみたす。

2024幎10月31日朚曜日 8:28:25 UTC+9 埳䞞浩:

埳䞞浩

unread,
Oct 31, 2024, 7:39:14 PM10/31/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。


>>「アクセスを蚱可するオリゞン」ずいうものがあり、
> →API33-002.phpに曞かれおいる「headerACAOhttp://example.jp」のこずでしょうか

違いたす。
「アクセスを蚱可するオリゞン」ずいうのは、仕様ないし蚭蚈の話です。仕様や蚭蚈に぀いおはわかりたすか?

プログラムを䜜成する前には、「こういうものを䜜ろう」ずいう「仕様」を決め、「こういう颚に䜜ろう」ずいう「蚭蚈」を行いたす。仕様や蚭蚈はプログラムではなく、仕様曞や蚭蚈曞等の文曞の圢にたずめるこずが䞀般的ですが、正匏な曞類でなくおも、slcakのやりずりや、゜ヌスコヌドのコメント等に曞かれおいる可胜性もありたす。いずれにしおも、゜ヌスコヌド䞊のプログラムではありたせん。

api.example.net はAPIを提䟛したすが、どこから呌ばれるかに぀いおは「仕様」や「蚭蚈」がありたす。曞籍の方では、仕様や蚭蚈ずは明瀺されおいたせんが、図3-34に、api.example.net ず example.jp が配眮され、example.jpがapi.example.netを呌び出しおいたす。この図から、api.example.netはexample.jpから呌ばれるこずを蚱可しおいるこずがわかりたす。これは「仕様」です。

すなわち、この「仕様」から、api.example.netが「アクセスを蚱可するオリゞン」はexample.jpであるこずが分かりたす。

そしお、この「仕様」を䞋に、以䞋のプログラムを蚘述するのです。仕様や蚭蚈が元ずなる基準、プログラム内容はその基準に埓っお曞いたものです。

header('AccessControlAllowOrigin: http://example.jp');



>>・ACAOヘッダに「アクセスを蚱可する
>>オリゞン」をセットする 必須なので
>>この䟋でもやっおいる>
→私がお送りした「7.png」の「⑧httpレスポンスにACAOヘッダを蚭定する」がこれに圓たるず認識しおたすが合っおたすでしょうか

あっおいたす。

> →この郚分もただ理解できおないようです。
> httpレスポンスはoirginヘッダを持たないず理解しおもう少し考えおみたす。

HTTPリク゚ストはブラりザからサヌバヌぞの通信です。ブラりザはWebペヌゞhttp://example.jp/33-001.htmlのオリゞンhttp://example.jpを知っおいお、蚭定するこずができたす。これがOriginヘッダです。
䞀方、HTTPレスポンスはサヌバヌからブラりザぞの通信です。サヌバヌ偎は、元々ブラりザのオリゞンは知らないですし、䞀方ブラりザはオリゞンがわかっおいたすから、わざわざサヌバヌからブラりザにオリゞンを䌝える必芁はありたせん。意味がないので蚭定もされたせん。


2024幎10月31日(朚) 17:12 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/86239280-c463-4e05-bf6e-a73f14d29c38n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 1, 2024, 1:21:34 PM11/1/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
詳しい解説もありがずうございたす。

䜕事も仕様→蚭蚈→モノの順番で䜜成されたすね。

それぞれのサヌバの立堎になっおみるず、httpリク゚ストずレスポンスでなんの情報をもっおいないずいけないかが想像できたす。
勉匷になりたす。

5.pngず6.pngに質問を蚘茉したしたので、ご回答頂けたすでしょうか。

2024幎11月1日金曜日 8:39:14 UTC+9 埳䞞浩:
4.png
2.png
3.png
5.png
1.png
6.png

埳䞞浩

unread,
Nov 1, 2024, 9:08:23 PM11/1/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは

質問①の回答
はい、これは無条件にACAOヘッダを蚭定するこずで構いたせん。
耇数のオリゞンに察応したい堎合は、Originヘッダを確認しおから圓該のヘッダに蚱可を䞎える実装も考えられたす。
䞀぀のオリゞンからのみ䜿えるAPIであれば、ACAOヘッダは固定で問題ありたせん。

質問②の回答
はい、そのずおりです。




2024幎11月2日(土) 2:21 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/6ac75d70-f413-4869-b18a-aa0cfda8a12en%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 2, 2024, 1:25:53 PM11/2/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。

JavaScriptの動䜜WEBブラりザずB間の動䜜に぀いお理解できおおりたせんが、CORSの動䜜が掗い出せたず思いたす。
ありがずうございたした匕き続き勉匷を進めたす。
今埌ずもよろしくお願い臎したす。

埳䞞様の䞋蚘ご回答に぀いおは安党確保支揎士の問題で取り䞊げられおいたした。
7.pngず8.pngに抂芁を茉せたした。
ここから
耇数のオリゞンに察応したい堎合は、Originヘッダを確認しおから圓該のヘッダに蚱可を䞎える実装も考えられたす。
ここたで

【参考】
H31 春 安党確保支揎士 午埌1 問1
https://www.sc-siken.com/pdf/31_haru/pm1_1.pdf
6ペヌゞ目のD課長の発蚀

2024幎11月2日土曜日 10:08:23 UTC+9 埳䞞浩:
5.png
1.png
4.png
2.png
8.png
3.png
6.png
7.png

OK

unread,
Nov 3, 2024, 11:53:26 AM11/3/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
䞀床クロヌズしたしたが、CORS関連でさらに質問がありたすので、
こちらを再開させお頂きたす。問題ありたしたらご指摘ください。

CORSプリフラむトリク゚ストなしの動䜜に぀いお図解臎したしたので、
お手数をおかけしたすが、ご確認ご回答頂けたすでしょうか。
特に、【質問②③】に぀いおは質問が合っおいるか䞍安です。。
スラむド内の文章に぀いおも認識霟霬ありたしたらご指摘ください。

䜕卒よろしくお願い臎したす。

2024幎11月3日日曜日 2:25:53 UTC+9 OK:
1.png
2.png
3.png
4.png

埳䞞浩

unread,
Nov 3, 2024, 8:44:06 PM11/3/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。

◎質問①の回答
プリフラむトリク゚ストの目的は、䞻にクロスサむト・リク゚ストフォヌゞェリ察策です。
CORSはややこしい仕組みになっおいたすが、CORSがややこしい理由の倧半は、

・CORS以前のアプリケヌションが、ブラりザのCORS察応によっお脆匱にならないように

ずいう互換性維持のためにありたす。なので、CORSを埌から芋るず、なぜこうなっおいるのだろうず疑問に思うこずは自然です。
では、なぜプリフラむトリク゚ストがCSRF察策ためかずいうず、

・CORS以前から元々CSRFの脅嚁は知られおいた
・CORS以前のCSRFはHTMLフォヌムによるものであり、XMLHttpRequest(XHR)からの攻撃はできないので、想定もされおいなかった
・なぜなら、CORS以前は、XMLHttpRequstではクロスオリゞンリク゚ストが送信できなかった
・CORSを考案する䞊で、以䞋を怜蚎する必芁があった
 ・XHR等がクロスオリゞンで送信できるようになったために新たにCSRF察策が必芁になる堎合を安党にする必芁がある
・この目的のためにプリフラむトリク゚ストが考案された

ずいうこずで、Content-Type: JSONは、HTMLフォヌムからは送信できたせんが、XHRなら送信できたす。このため、「埓来はCSRF察策の必芁がなかったが、XHR等のクロスオリゞン察応によりCSRF察策が必芁になった」パタヌンに該圓したす。
䞖の䞭に既にあるアプリケヌションを䞀斉に察策するこずは䞍可胜なので、ブラりザ偎の安党機構により、このパタヌンはカバヌされるこずになりたした。
詳しくは以䞋の動画で説明しおいたす。

https://www.youtube.com/watch?v=yBcnonX8Eak


◎質問②の回答
これは、APIが耇数のオリゞンに察応する堎合に必芁になりたす。
以前のやりずりにあった以䞋のケヌスですね。


> 埳䞞様の䞋蚘ご回答に぀いおは安党確保支揎士の問題で取り䞊げられおいたした。
> 7.pngず8.pngに抂芁を茉せたした。
> ここから
> 耇数のオリゞンに察応したい堎合は、Originヘッダを確認しおから圓該のヘッダに蚱可を䞎える実装も考えられたす。
> ここたで


◎質問③の回答
これは基本的にCSRF察策なのですが、それだけであれば、Originヘッダに察しおACAOヘッダで応答するだけでも目的は達したす。
たず、「単玔リク゚ストの条件から倖れるのでプリフラむトリク゚ストを送信する」わけですが、「単玔リク゚ストのどの条件を満たしおいないか」を送信するこずは、仕組みずしおは自然なこずだず思いたす。
たた、ACAOヘッダだけで枈たせられないようにしおいる理由ずしおは、単玔リク゚ストから倖れる理由を瀺しおアプリケヌション偎に明瀺的に蚱可を出させるこずで、䞍泚意による脆匱性混入を避けるこずが目的なのだろうず私は解釈しおいたす。


◎その他
现かい衚珟䞊の問題になりたすが、3,pngの

> PRHに察応できないけどhttpレスポンスを返す

ずいう箇所は、珟実には以䞋だろうず思いたす。

> PRHに察応しおいないので単にhttpレスポンスを返す





2024幎11月4日(月) 1:53 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/2338566a-d701-4f8d-b705-c4e39b72e8fdn%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 4, 2024, 11:38:03 AM11/4/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。
たた、動画の共有もありがずうございたす。

CORSが普及した長い経緯があるのですね。
ゆくゆくは埳䞞様の曞籍でCSRFを勉匷したすので、その時にCORSずの関連が理解できるず思いたす。
さらにその時に、珟圚取り組んでいるCORSの図解が圹に立぀ず思いたす。

4.pngにお質問を1぀远蚘しおおりたす。
お手数をおかけし倧倉恐瞮ですが、䜕卒ご回答よろしくお願い臎したす。

2024幎11月4日月曜日 10:44:06 UTC+9 埳䞞浩:
4.png
1.png
3.png
2.png

埳䞞浩

unread,
Nov 5, 2024, 10:34:20 AM11/5/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。

質問①ぞの回答ですが、これは特に深い理由はないず思いたす。䞀぀でも゚ラヌがあれば、゚ラヌにする条件ずしおは十分なので、最初に確認した゚ラヌだけを衚瀺しおいるのだず思いたす。

2024幎11月5日(火) 1:38 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/55181b89-7910-42c8-b92a-71b45944eb00n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 5, 2024, 11:28:48 AM11/5/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML
埳䞞様、い぀もお䞖話になっおおりたす。
ご確認、ご回答ありがずうございたす。

プリフラむトリク゚ストありに぀いお図解臎したした。
4.pngに質問①を蚘茉臎したしたので、䜕卒ご回答よろしくお願い臎したす。

ちなみに、埳䞞様は有償のメンバヌシップやオンラむンサロンは開催しおいないでしょうか。

2024幎11月6日氎曜日 0:34:20 UTC+9 埳䞞浩:
3.png
4.png
2.png
1.png

埳䞞浩

unread,
Nov 5, 2024, 6:11:52 PM11/5/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは

質問①に察する回答ですが、たず33-004a.phpの゜ヌスコヌドは以䞋ずなりたす。

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    if($_SERVER['HTTP_ORIGIN'] === 'http://example.jp') {
      header('Access-Control-Allow-Origin: http://example.jp');
      header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
      header('Access-Control-Allow-Headers: Content-Type');
      header('Access-Control-Max-Age: 1728000');
      header('Content-Length: 0');
      header('Content-Type: text/plain');
    } else {
      header('HTTP/1.1 403 Access Forbidden');
      header('Content-Type: text/plain');
      echo "このリク゚ストは継続できたせん";
    }
  } else {
    die('Invalid Request');
  }

このスクリプトはプリフラむトリク゚ストの凊理しかありたせん。なので、OPTIONSヘッダの堎合は、2行目のif文によりACAOヘッダを返したすが、POSTリク゚ストの堎合はACAOヘッダは返されたせん。
この凊理を加えたのが、33-004b.phpです。POSTリク゚ストの堎合の凊理が远加されおいるこずが分かりたす。

<?php
  if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
    if ($_SERVER['HTTP_ORIGIN'] == "http://example.jp") {
      header('Access-Control-Allow-Origin: http://example.jp');
      header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
      header('Access-Control-Allow-Headers: Content-Type');
      header('Access-Control-Max-Age: 10');
      header("Content-Length: 0");
      header("Content-Type: text/plain");
    } else {
      header("HTTP/1.1 403 Access Forbidden");
      header("Content-Type: text/plain");
      echo "このリク゚ストは継続できたせん";
    }
  } elseif ($_SERVER['REQUEST_METHOD'] === "POST") {
    header('Content-Type: application/json');
    header('Access-Control-Allow-Origin: http://example.jp');
    header('Access-Control-Max-Age: 10');
    echo json_encode(['zipcode' => '100-0100', 'address' => '東京郜倧島町']);
  } else {
    die('Invalid Request');
  }


2024幎11月6日(æ°Ž) 1:28 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/ee04cd91-52d5-447d-938c-857c5f0bdb74n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 6, 2024, 2:24:28 AM11/6/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML

埳䞞様、い぀もお䞖話になっおおりたす。

ご回答ありがずうございたす。


プログラム33-004a.phpをよく読んでみようず思いたす。

プログラムを䞋蚘文面に瀺したす。


PHRにおOPTIONメ゜ッド䜿甚時

・Originヘッダがhttp://B

→ACAO、 ACAH、ACAMヘッダなどをhttpレスポンスに蚭定する

・Originヘッダがhttp://Bではない

→「このリク゚ストは継続できたせん」をhttpレスポンスに蚭定する


PHRにおOPTIONメ゜ッド以倖䜿甚時

→「dieInvalid Request」が実行される

→⑩httpリク゚ストはPOSTメ゜ッド䜿甚なのでdie関数が実行された


「33-004b.php」は䞊蚘に、

「httpリク゚ストにおPOSTメ゜ッド䜿甚時」のelse if文が远加されおるので、

「PHRあり完成」ではACAOヘッダがhttpレスポンスで返された、ずいうこずですね。


「33-004b.php」のACAMヘッダを芋るずGETも蚱可されおいるので、

「httpリク゚ストにおGETメ゜ッド䜿甚時」のelse if文も远加しないず、゚ラヌが発生するず感じたした。

今回の䟋では、httpリク゚ストでGETメ゜ッドは未䜿甚なので問題なしず理解しおおりたす。

2024幎11月6日氎曜日 8:11:52 UTC+9 埳䞞浩:

埳䞞浩

unread,
Nov 6, 2024, 6:16:05 AM11/6/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは

> 「33-004b.php」のACAMヘッダを芋るずGETも蚱可されおいるので、
> 「httpリク゚ストにおGETメ゜ッド䜿甚時」のelse if文も远加しないず、゚ラヌが発生するず感じたした。
>  今回の䟋では、httpリク゚ストでGETメ゜ッドは未䜿甚なので問題なしず理解しおおりたす。

䞀般に、プリフラむトリク゚ストでは、URL毎に本圓に必芁最䜎限のメ゜ッド等の蚱可を䞎えるこずは通垞せず、アプリ党䜓ずしお䜿甚するメ゜ッド等をたずめお蚱可するこずが䞀般的です。その理由は、個別に蚱可するメ゜ッドを指定しおもあたり安党には寄䞎せず、面倒なだけだからです。

たずえば、この䟋ではプリフラむトリク゚ストにより、このAPIでは䜿っおいないGETメ゜ッドにも蚱可を䞎えおいたすが、GETメ゜ッドの通信を送っおも単に゚ラヌになるだけで実害はありたせん。

このあたりの勘所がわかるためには、前述のCSRF脆匱性の孊習に加えお、珟実のアプリケヌション開発のやり方も孊ぶこずでしっくりくるず思いたす。珟実のアプリケヌション開発では、アプリケヌションフレヌムワヌク等が提䟛するCORS向けラむブラリを䜿うこずが倧半ですが、通垞、アプリケヌション党䜓でCORS蚭定を共通にするず思いたす。



2024幎11月6日(æ°Ž) 16:24 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/6b7fb7c7-42ca-432b-bd57-bfc00b656ac5n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Nov 7, 2024, 2:31:26 AM11/7/24
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML

埳䞞様、い぀もお䞖話になっおおりたす。

ご回答ありがずうございたす。倧倉勉匷になりたす。

匕き続き勉匷を続けたす。


CORS成立時のcookie送信に぀いおですが、BにおwithCredentials=trueを蚘茉するず、WEBブラりザからAぞの httpリク゚ストにcookieが付䞎されたす。

①
このcookieは、Bで発行されたものず認識しおよろしいでしょうか

②
①が正しい堎合、BからWEBブラりザぞのXMLHttpRequestの䞭身をOWASP ZAPで確認する方法はないでしょうか

WEBブラりザ→Aのhttpリク゚ストずB→WEBブラりザのXMLHttpRequestが、同じcookieを持っおいるのか確認したいです。
曞籍に茉っおいたブレヌクポむントが䜿えたすでしょうかただ怜蚌前ですので垰宅埌に詊したす。


2024幎11月6日氎曜日 20:16:05 UTC+9 埳䞞浩:

埳䞞浩

unread,
Nov 7, 2024, 8:52:36 AM11/7/24
to wasbook...@googlegroups.com
埳䞞です。こんにちは。

質問①
> CORS成立時のcookie送信に぀いおですが、BにおwithCredentials=trueを蚘茉するず、WEBブラりザからAぞの httpリク゚ストにcookieが付䞎されたす。
> ①このcookieは、Bで発行されたものず認識しおよろしいでしょうか

違いたす。Aで発行されたCookieです。Cookieはdomain属性がない堎合Cookieを蚭定したサむトにのみ付䞎されたす。

質問②
> ①が正しい堎合、BからWEBブラりザぞのXMLHttpRequestの䞭身をOWASP ZAPで確認する方法はないでしょうか

①は正しくないのですが、OWASP ZAPで確認する方法は説明できたす。
実習環境から、「8. 33-005b:アクセスカりンタAccess-Control-Allow-Credentialsあり」をアクセスしお、ZAP䞋偎で33-006b.phpを遞択するず、1.png の状態ずなりたす。この状態では、ただCookieはセットされおいないので、HTTPリク゚ストヘッダにはCookieはセットされおおらず、レスポンスヘッダには以䞋のSet-Cookieヘッダがありたす。

Set-Cookie: PHPSESSID=l70b1hc2vbr7henas61196i8p0; path=/

これは、A(api.example.net)でCookieがセットされたこずになりたす。

次に、ブラりザでリロヌドボタンを抌しお、ZAP䞋偎で33-006b.php2回目を遞択するず、2.png の状態になりたす。こちらでは、リク゚ストヘッダに以䞋のようにCookieヘッダがありたす。

Cookie: PHPSESSID=l70b1hc2vbr7henas61196i8p0

すなわち、APIでセットされたCookieがAPIぞのリク゚ストで付䞎されたこずになりたす。
そもそも、サむトAずサむトBではドメむン名がたったく異なるので、AでセットされたCookieは、Bには付䞎されたせん。

ZAPでの確認の仕方は、ZAP䞋偎のHTTPメッセヌゞリク゚スト+レスポンスの履歎䞀芧から、確認したいメッセヌゞを遞ぶこずで可胜です。



2024幎11月7日(朚) 16:31 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/6d19d494-ce90-4989-8f3e-8b5d3130c13bn%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com
2.png
1.png

OK

unread,
Mar 26, 2026, 3:34:00 AM (9 days ago) Mar 26
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML

埳䞞様、い぀もお䞖話になっおおりたす。

CORSの怜蚌環境「プリフラむトリク゚スト以䞋、PFRなし」以䞋、察象環境に぀いおです。


1

WEBブラりザはAPIサヌバに察しお

XMLHtpRequest以䞋、XHRを発蚀する盎前に、XHRの内容「content-type」が「application/json」になっおいる、などを基にシンプルなリク゚ストではないず刀断しお、XHRに先立っおPFR発信芁ず刀断する、ずいう認識ですが合っおたすでしょうか。


2

「1」が正しい堎合、察象環境のようなタむトルが付けられおいるのはなぜでしょうか。


掚枬するず、PFRを受蚀したAPIサヌバがCORSぞッダAccess-Control-Allow-Headersヘッダ、などをhttpレスポンスに蚭定する仕様になっおおらず、WEBブラりザがAPIサヌバからhttpレスポンスを受信した際にCORS゚ラヌを発生させるため、PFRなしではXHR発蚀たで凊理が蟿り着かない、ずいう意味で察象環境のようなタむトルが付けられおいる、ず思いたした。

合っおおりたすでしょうか。

2024幎11月7日朚曜日 22:52:36 UTC+9 埳䞞浩:

埳䞞浩

unread,
Mar 26, 2026, 4:34:26 AM (9 days ago) Mar 26
to wasbook...@googlegroups.com
埳䞞です。こんにちは。お久しぶりですね。

> 1 WEBブラりザはAPIサヌバに察しお

. XMLHtpRequest以䞋、XHRを発蚀する盎前に、XHRの内容「content-type」が「application/json」になっおいる、などを基にシンプルなリク゚ストではないず刀断しお、XHRに先立っおPFR発信芁ず刀断する、ずいう認識ですが合っおたすでしょうか。


はい、ご認識のずおりです。


> 2 「1」が正しい堎合、察象環境のようなタむトルが付けられおいるのはなぜでしょうか。


これは挔習環境においお「33-003 :プリフラむトリク゚ストなし」のようなタむトルが぀いおいるこずに察するご質問かず思いたすが、アプリケヌション偎でプリフラむトリク゚ストの察応をしおいない、ずいう意図です。





2026幎3月26日(朚) 16:34 OK <cs00...@gmail.com>:
このディスカッションを衚瀺するには、https://groups.google.com/d/msgid/wasbook-readers/adf022be-6573-4758-bede-7d04073a8199n%40googlegroups.com にアクセスしおください。


--
埳䞞浩 htok...@gmail.com

OK

unread,
Mar 27, 2026, 5:21:18 AM (8 days ago) Mar 27
to 「䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方」サポヌトML

埳䞞様、倧倉ご無沙汰しおおりたす。

少し仕事など人生に迷走しおおりたした。ずいうか途䞭です。


ご回答ありがずうございたす。

「2」の質問に぀いおですが、ご回答頂いた通りです。

察象環境のタむトルである「プリフラむトリク゚ストなし」は、

「アプリケヌション偎におプリフラむトリク゚ストに察応する仕様がなし」ず理解したした。


今埌ずもよろしくお願い臎したす。


2026幎3月26日朚曜日 17:34:26 UTC+9 埳䞞浩:
Reply all
Reply to author
Forward
0 new messages