<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>概要</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> は、攻撃先 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>を別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">攻撃者</anchor>が誘導し、攻撃先
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>における当該<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>の権限で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor> (や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>)
の意図せぬ動作を引き起こせるような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">脆弱性</anchor>・<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">攻撃</anchor>です。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 例えば次のような被害が起きることがあります。</p><figure xmlns="http://www.w3.org/1999/xhtml" class="list"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 攻撃の被害例</figcaption><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 知らないうちに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">掲示板</anchor>に勝手な内容で投稿してしまう</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 知らないうちに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子商取引</anchor>サイトで商品を購入してしまう</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 知らないうちに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SNS</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">足跡</anchor>機能に名前を残してしまう</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 知らないうちに会員制 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ログイン</anchor>状態にさせられてしまう</li></ul></figure><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 何を被害とするかは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>の捉え方に依存するところもあります。
例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサイト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アクセスカウンター</anchor>の数値が意図せぬ形で増加しても、
迷惑ではあるが対策するほどの被害は受けていない、という認識はあり得ます。</p></example></section><section><h1>プロトコル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 対策のために使うことができる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル要素</anchor>には次のものがあります。<figure class="short list"><ul><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Origin:</anchor></code></li><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Referer:</anchor></code></li><li><code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">state</anchor></code></li><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">X-CSRFToken:</anchor></code></li><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">X-CSRF-Token:</anchor></code></li><li><code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">X-Modhash:</anchor></code></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rkm</anchor></code></li></ul></figure></p></section><section><h1>検査</h1><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Origin:</anchor></code> が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">対象URL</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源</anchor>と同じなら、問題ありません。<ul><li>問題があるとしたら、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 以外の脆弱性または設計の誤りです。</li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">安全なメソッド</anchor>なら、問題ありません。<ul><li>問題があるとしたら、設計の誤りです。</li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> それ以外なら、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 攻撃でないことを確認しなければなりません。<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 多くの場合は外部<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源</anchor>からの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非安全</anchor>メソッドの要求を受け入れる必要はないでしょうから、 <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Origin:</anchor></code> や <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Referer:</anchor></code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの起源</title></anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">対象URL</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">URLの起源</title></anchor>と異なれば、誤りと判断できます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor></code> が 
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/x-www-form-urlencoded</anchor></code>、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">multipart/form-data</anchor></code>、
<code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor></code> のいずれかなら、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム</anchor>から送信されたかもしれません。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Authorization:</anchor></code> も <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie:</anchor></code>
もないなら、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHR</anchor> などから送信されたかもしれません。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CORS</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">preflight</anchor> に返答しているなら、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHR</anchor> などから送信されたかもしれません。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">auth-scheme</anchor></code> が <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">oauth</anchor></code> や <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bearer</anchor></code>
など <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>以外のものなら、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム</anchor>から送信されたものではありません。</li></ul></li></ol></figure><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PKP</anchor> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>に以上の条件に合致しない <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor>
データを送信させることがあります。 (<code xmlns="http://www.w3.org/1999/xhtml" class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">report-uri</anchor></code> 参照。)</comment-p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end>
<cite>高木浩光@自宅の日記 - クロスサイトリクエストフォージェリ(CSRF)の正しい対策方法</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://takagi-hiromitsu.jp/diary/20050427.html#p01">http://takagi-hiromitsu.jp/diary/20050427.html#p01</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="en">Hixie's Natural Log: Different perspectives in the Web standards community</cite> (<time>2009-01-24 00:39:51 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://ln.hixie.ch/?start=1232666113&amp;count=1">http://ln.hixie.ch/?start=1232666113&amp;count=1</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="ja-JP">高木浩光@自宅の日記 - クロスサイトリクエストフォージェリ(CSRF)の正しい対策方法</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">高木浩光</anchor> 著, <time>2009-09-27 22:35:44 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://takagi-hiromitsu.jp/diary/20050427.html#p01">http://takagi-hiromitsu.jp/diary/20050427.html#p01</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite xml:lang="ja-JP">高木浩光@自宅の日記 - クロスサイトリクエストフォージェリ(CSRF)の正しい対策方法</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">高木浩光</anchor> 著, <time>2011-02-22 10:37:01 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://takagi-hiromitsu.jp/diary/20050427.html">http://takagi-hiromitsu.jp/diary/20050427.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite xml:lang="ja-JP">高木浩光@自宅の日記 - クロスサイトリクエストフォージェリ(CSRF)対策がいまいち進まなかったのはなぜか</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">高木浩光</anchor> 著, <time>2011-02-03 19:09:35 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://takagi-hiromitsu.jp/diary/20050703.html">http://takagi-hiromitsu.jp/diary/20050703.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="ja-JP">高木浩光@自宅の日記 - 暗黙的に形成する事実標準の話と回避策の話を混同してはいけない, 駄目な技術文書の見分け方 その1の2</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">高木浩光</anchor> 著, <time>2010-05-30 18:09:39 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://takagi-hiromitsu.jp/diary/20061115.html">http://takagi-hiromitsu.jp/diary/20061115.html</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <cite xml:lang="ja">セキュリティ・ブラウザ環境について | ソニー</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Sony Marketing (Japan) Inc.</anchor> 著, <time>2015-06-10 15:26:55 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.sony.jp/Security/index.html">http://www.sony.jp/Security/index.html</anchor-external></figcaption><blockquote><p>ストアは、ご利用者とストアとの間でのクレジットカード番号を含むすべての通信内容に対して、SSL(Secure Socket Layer)テクノロジーによる暗号化を施すなどして合理的な範囲内でセキュリティの強化に努めておりますが、更なる安全のため、My Sony ID(もしくはストアログインID)にてログインしている間は、ストア以外のウェブサイトを閲覧されないことをお勧めいたします。</p><p>万一、他のウェブサイトを閲覧される場合には、ログアウトしていただくことをお勧めします。なお、ログアウトされた場合、30分以内にログインされないとレジの商品が削除されますのでご注意ください。</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite xml:lang="en">Webmention</cite>
(<time>2017-01-11 04:06:01 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://webmention.net/draft/#h-cross-site-request-forgery">https://webmention.net/draft/#h-cross-site-request-forgery</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal> ここで例示されている「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 対策」は一体誰から何を守るためのものなんだろう。。。
ここに書いてある通りのことをやっても、カジュアル <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSRF</anchor> 攻撃に第三者を巻き込むことを若干防げる程度じゃないかな。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <cite>How to Mitigate CSRF Using Origin Headers?</cite>
(<time>2017-06-28 13:54:47 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lenxwei.blogspot.jp/2014/08/how-to-mitigate-csrf-using-origin.html">http://lenxwei.blogspot.jp/2014/08/how-to-mitigate-csrf-using-origin.html</anchor-external></p></section></body></html>