「リファラ偽装」という用語の筋の悪さに、ついカッとなって「リファラ偽装」を使わずにリファラとCSRFをまとめ直す - None is None is Noneという記事を書いてしまったので、ついでに「用語はだれが決めるのか?」「用語はどう使うべきか」も書こうと思います。
用語は個々人が勝手に定義するもの
昔、冥王星が惑星から外される、というのが話題になりましたね。国際天文学連合が冥王星が含まれない形で「惑星」という用語を定義したのです。
あれは実は科学の世界では例外的なことです。というのも、普通は科学用語を国際機関が定義したりはしないのです。
個人的なエピソード。大学2年生の代数学で長尾汎の「代数学」という本が教科書でした。
- 作者: 永尾汎
- 出版社/メーカー: 朝倉書店
- 発売日: 1983/01
- メディア: 単行本
- 購入: 1人 クリック: 42回
- この商品を含むブログ (3件) を見る
書評を見ても「コンパクトにまとまっている」「辞書的に使うのに向いている」と、評価されてる本です。しかし教授は言いました "素イデアル"の定義が他の本と違う。
「素イデアル」は、天文学でいう「惑星」レベルの、代数学の超超超基本的な概念です。その「素イデアル」ですら、著者によって違うのです。
なぜなら、用語は研究者が自分の論文や教科書を書くのに便利なように作るものだからです。
「素イデアル」も19世紀のクンマーという数学者が「代数的整数では、整数のような素因数分解の一意性が成り立たないけど、代数的整数のある種の集合を考えれば素因数分解が一意になるぞ。 この代数的整数のある種の集合は重要そうだから『イデアル』と名付けよう。素数に相当するイデアルは『素イデアル』と名付けよう」と、独断で決めたものなのです。*1
そして、クンマーの論文を読んだ人たちが「『イデアル』を使えば、僕の定理の証明もスッキリ書けるぞ!」と思って自分らの論文でも使い出したことで、広く使われることになりました。一方で、別の可能性もありました。「この『素イデアル』の定義だと、かえって証明が長ったらしくなってしまうから、定義を少し変更しよう」と思って、別の「素イデアル」を使う人が出たかもしれません。実際、長尾汎はそうしたようです。また、そもそも、誰もクンマーの論文を読まなかったとしたら「素イデアル」が使われることはありませんでした。
つまり、どの用語が使われるかは、一種の市場原理で決まるのです。
件の「惑星」も、冥王星が他の天体と性質が違うために、一々「冥王星を除く惑星は〜」「水星・金星・地球・火星・木星・土星・天王星・海王星は〜」と書くのが面倒だから、多くの研究者が「惑星」に冥王星は含まないようしたい、と思っていたのでしょう。
もちろん「この論文では『惑星』は水金火木土天海冥のこととする。地球は惑星ではない。なぜならセーラーアースはいないからだ」と書いてもいいのです。ただし、誰もそんな論文を読まないので、地球を惑星に含まない定義が普及することは無いでしょう。
ただし、天文学の分野では、天体のデータベースを作ったり望遠鏡や探査機の運用したりで研究者同士の連携が重要なので、特別に「惑星」と言う用語を国際天文学連合で決議しました。
「リファラ偽装」はどう悪いのか?
さて、知らない人が「リファラ偽装」と聞いたら、何のことだと思うでしょう?
- 「ユーザーが、ブラウザの設定を変更したりして、他サイトからのアクセスだと偽装したリファラをサーバーに送ること」
- 「罠サイトが、Flush Playerのバグを利用して、他サイトからのアクセスだと偽装したリファラをサーバーに送ること」
「リファラ偽装」という字面だけからは、どちらかは分かりません。私はAのことだと思いました。
しかし、CSRFの文脈では、Bの意味でも使われます。
この記事の最初にあげたリファラとCSRF対策の話では、Bの意味で使っていて、リファラを偽装するのは簡単にできるのだよ云々と発言する人を「中二病か偽物」としています。
しかし、「リファラ偽装は簡単にできる」と発言する人は、単に「リファラ偽装」をAの意味だと思っている可能性が高そうです。実際、"リファラ 偽装"でGoogle検索(https://www.google.co.jp/search?client=ubuntu&channel=fs&q=%E3%83%AA%E3%83%95%E3%82%A1%E3%83%A9+%E5%81%BD%E8%A3%85&ie=utf-8&oe=utf-8&hl=ja)したところ、TOP 3サイトではAの意味で使っています。
よくよく確認しないと何を指すのか不明な「リファラ偽装」は良い用語とは思えません。 少なくとも、私は使いたくない用語です。
大体「リファラを偽装」してるわけではなく「アクセス元を偽装」「正しいサイトからのアクセスであるかのように偽装」しているわけですし。
「リファラ偽装」は止めましょう
私は単に「リファラ偽装」は使うのを止めたらいいと思います。
「リファラ偽装」を使わずにリファラとCSRFをまとめ直す - None is None is Noneでは、「リファラ偽装」使わずに、記事を書けました。 他記事でも、「リファラ偽装」は使っていないようです。
- 第23回 まだまだ残っているCSRF攻撃 :なぜPHPアプリにセキュリティホールが多いのか?|gihyo.jp … 技術評論社
- 大量の「はまちちゃん」を生み出したCSRFの脆弱性とは? - ITmedia エンタープライズ
つまり「リファラ偽装」は、これを使わないと説明ができない「イデアル」レベルの用語ではありません。 また、特定の定義が広く普及しているわけでもありません。
ならば、わざわざ誤解を招く用語を使って混乱を招くよりも、別の用語で言い換えるか、 どうしても使いたいなら「『リファラ偽装』とはflushの脆弱性を利用して云々」と文中で用語を定義するのが、親切なやり方ってもんです。
ましてや、「俺の定義が正しいリファラ偽装の定義だ。お前の定義は間違っているし、俺の定義をよく調べないで、間違った定義を使うお前は中二病か偽物だ」なんてのは、天に唾する行為でしょう。*2