今日の一言「久しぶりの学習カテゴリ」「創作ネタとして……」
ある程度類似の問題を複数解くことで、「正解」を導くことはできるようになっても、「理解」した気持ちになれない。
理解とは、正しく分類できることであるので、問題が解ければ、理解したと言えるかもしれない。しかし、その根拠が自分の中でしっくりくる……この表現も曖昧なわけだが、あやふやな状態では理解したとはいえないだろう。
そんな事柄は多くあるわけだが、その一つの「クロスサイトスクリプティング」というクラッキング手法について解説を試みることで、「理解」に近づくことを目的とする。
クロスサイトスクリプティング(以下「XSS」)とは、クラッキングである、という理解はまず簡単にできる。
問題は、その中身だ。いろんなネットワークを通じた攻撃手法(DoSとかセッションハイジャックとかSQLインジェクション)というものがある中で、XSS特有の「手がかり」は何かを理解する必要がある。
WEBサイトの理解をまず確かめよう。このブログもWEBサイトである。昔はホームページという言葉の方がよく用いられていたと思う。「ホーム」でもなくなってきたから、WEBという表現が主流になったのだとか聞いたことがあったような。
で、脆弱性のあるWEBサイト、ということだが、基本、単にブラウザ(WEBサイト閲覧に使われるアプリ)に表示するだけのサイトは、基本問題にならない。
もっと分解して表現すると、端末(クライアント)とサーバという概念がある。
要はパソコンが端末。サーバはネットワークの先にあるすごい機械だ(かっこわらい)。
で、表示だけするサイトとは、クライアントからサーバに「見せて」って要求して、サーバから「はいどうぞ」ってやりとりがあって、それだけである。
で、その「見せて」ってのは、URL(アドレス)で示される。もっといえば、URLは、IPアドレス+ファイルの場所を示す情報である。その文字列を数値(IPアドレス)に変換してくれるのが「DNSサーバ」である。――わきみちにそれた。
要は、「見せて」→「どうぞ」だけのやりとりのサイトは、脆弱性もない(と言い切ってしまうのは危険なんだろうが)。
問題になるのは、端末とサーバで、双方向なやり取りがあるサイトである。
もちろん、単なる読者、閲覧者にとっては、基本一方向であるが、コメントとか投稿できる。そして筆者も、端末で書いた記事を、ネットワークを通じてサーバに送り込んでいる。
これらの双方向な情報のやりとりのためには、「フォーム」が使われる。要は「入力欄」。
このフォームに、データベースを操作する言語のSQLを入力して、データを破壊したり抽出したりするのが「SQLインジェクション」だ。
これは分かりやすいと思う。
では本題の、XSSとは、どういったものなのか。
あれ、そうすると、僕は、「一方向のサイトは大丈夫」と書いたが、URLに埋め込みができるのなら、どんなサイトも危ないってことになりはしないか。
また、国家試験問題(H25秋応用情報)で、こんな問題↓がある。
あれ、やっぱり、そうすると、僕が書いてきた、「フォーム」(入力欄)=入力フィールドに悪意あるスクリプトを埋め込む、という「理解」が正しい気がしてくる。
https://www.shadan-kun.com/blog/measure/1052/
上の記事を参照するに、やはり、フォームを使ってスクリプトを埋め込む手法が紹介されている。しかし、納得がいかなかったのでさらに調べると、以下サイトで少し分かった気がした。
とほほのWWW入門
http://www.tohoho-web.com/ex/xss.html
――ってか、懐かしい!(笑)
僕がWEBサイトの基礎を学び始めた十数年前によく参照させて頂いていた。
コピーライトが2019年になっていて、まだ運営されていたんだなぁとしみじみ。(個人運営だと思ってたけど、どうなんだろ)
――要するに、両方の手法があるということだ。
URL埋め込み型(反射型)と、掲示板埋め込み型(格納型)があるということだ。
なるほど。ここまで調べてようやく分かってきた(理解してきた)気がする。
ちなみに、問題を解くことに関しては間違えはなかった、という点が、本記事の裏の主旨である。
複数の問題を解くことはできても、なんとなく分からなかったXSSという概念。要は僕の言葉で理解すれば、以下のようになる。
「簡易プログラム(スクリプト)を利用した攻撃手法。正規のWEBサイトにスクリプトを仕掛けることに特徴がある」
前書き
何度勉強しても、「分かった」という気持ちになれない事柄というのがある。ある程度類似の問題を複数解くことで、「正解」を導くことはできるようになっても、「理解」した気持ちになれない。
理解とは、正しく分類できることであるので、問題が解ければ、理解したと言えるかもしれない。しかし、その根拠が自分の中でしっくりくる……この表現も曖昧なわけだが、あやふやな状態では理解したとはいえないだろう。
そんな事柄は多くあるわけだが、その一つの「クロスサイトスクリプティング」というクラッキング手法について解説を試みることで、「理解」に近づくことを目的とする。
クロスサイトスクリプティング
とりあえず、辞書的に引用。クロスサイトスクリプティングとは、ネットワークを通じた攻撃手法の一つで、保安上の弱点(脆弱性)のあるWebサイトを踏み台に、悪意のあるプログラムをそのサイトの訪問者に送り込む手法。また、そのような攻撃に利用される脆弱性のこと(XSS脆弱性)。
IT用語辞典e-words
クロスサイトスクリプティング(以下「XSS」)とは、クラッキングである、という理解はまず簡単にできる。
問題は、その中身だ。いろんなネットワークを通じた攻撃手法(DoSとかセッションハイジャックとかSQLインジェクション)というものがある中で、XSS特有の「手がかり」は何かを理解する必要がある。
WEBサイトの基本
ポイントとなる要素として、「WEBサイトを踏み台に」という点だ。WEBサイトの理解をまず確かめよう。このブログもWEBサイトである。昔はホームページという言葉の方がよく用いられていたと思う。「ホーム」でもなくなってきたから、WEBという表現が主流になったのだとか聞いたことがあったような。
で、脆弱性のあるWEBサイト、ということだが、基本、単にブラウザ(WEBサイト閲覧に使われるアプリ)に表示するだけのサイトは、基本問題にならない。
もっと分解して表現すると、端末(クライアント)とサーバという概念がある。
要はパソコンが端末。サーバはネットワークの先にあるすごい機械だ(かっこわらい)。
で、表示だけするサイトとは、クライアントからサーバに「見せて」って要求して、サーバから「はいどうぞ」ってやりとりがあって、それだけである。
で、その「見せて」ってのは、URL(アドレス)で示される。もっといえば、URLは、IPアドレス+ファイルの場所を示す情報である。その文字列を数値(IPアドレス)に変換してくれるのが「DNSサーバ」である。――わきみちにそれた。
要は、「見せて」→「どうぞ」だけのやりとりのサイトは、脆弱性もない(と言い切ってしまうのは危険なんだろうが)。
問題になるのは、端末とサーバで、双方向なやり取りがあるサイトである。
双方向なサイト
双方向なサイトとは、このブログのようなものである。もちろん、単なる読者、閲覧者にとっては、基本一方向であるが、コメントとか投稿できる。そして筆者も、端末で書いた記事を、ネットワークを通じてサーバに送り込んでいる。
これらの双方向な情報のやりとりのためには、「フォーム」が使われる。要は「入力欄」。
このフォームに、データベースを操作する言語のSQLを入力して、データを破壊したり抽出したりするのが「SQLインジェクション」だ。
これは分かりやすいと思う。
では本題の、XSSとは、どういったものなのか。
XSSの手法
先ほどの辞書の続きを引用。典型的なXSS攻撃では、攻撃者はターゲットとなる脆弱なサイトへのリンクを設置した罠サイトを設け、閲覧者がリンクをクリックするよう仕向ける。その際、リンクのURLのパラメータ部分にスクリプト(JavaScriptコード)やHTMLタグの断片を埋め込み、閲覧者が脆弱なサイトを開くとページ内に自動的にそれらの悪質なスクリプトが埋め込まれ、即座に閲覧者のWebブラウザで実行される。
あれ、そうすると、僕は、「一方向のサイトは大丈夫」と書いたが、URLに埋め込みができるのなら、どんなサイトも危ないってことになりはしないか。
また、国家試験問題(H25秋応用情報)で、こんな問題↓がある。
クロスサイトスクリプティングの手口はどれか。
正解:WEBアプリケーションに用意された入力フィールドに、悪意あるJavaScriptコードを含んだデータを入力する
あれ、やっぱり、そうすると、僕が書いてきた、「フォーム」(入力欄)=入力フィールドに悪意あるスクリプトを埋め込む、という「理解」が正しい気がしてくる。
要するに
クロスサイトスクリプティング(XSS)のセキュリティ対策とは?https://www.shadan-kun.com/blog/measure/1052/
上の記事を参照するに、やはり、フォームを使ってスクリプトを埋め込む手法が紹介されている。しかし、納得がいかなかったのでさらに調べると、以下サイトで少し分かった気がした。
とほほのWWW入門
http://www.tohoho-web.com/ex/xss.html
――ってか、懐かしい!(笑)
僕がWEBサイトの基礎を学び始めた十数年前によく参照させて頂いていた。
コピーライトが2019年になっていて、まだ運営されていたんだなぁとしみじみ。(個人運営だと思ってたけど、どうなんだろ)
――要するに、両方の手法があるということだ。
URL埋め込み型(反射型)と、掲示板埋め込み型(格納型)があるということだ。
なるほど。ここまで調べてようやく分かってきた(理解してきた)気がする。
ちなみに、問題を解くことに関しては間違えはなかった、という点が、本記事の裏の主旨である。
複数の問題を解くことはできても、なんとなく分からなかったXSSという概念。要は僕の言葉で理解すれば、以下のようになる。
「簡易プログラム(スクリプト)を利用した攻撃手法。正規のWEBサイトにスクリプトを仕掛けることに特徴がある」
あとがき
(かっこ書きである。XSSについて、他書籍とかの説明で、「(スクリプトを使って)別のWEBサイトを表示し……」とかって説明しているから分けわからなくなったのである。ひどい。まぁその、人によって(知識とか頭の回転とか語彙力とか)分かりやすさは異なるから、上の僕の説明が分かりやすいかというと一概ではないだろうが、少なくても僕にとっては分かりやすい。先日の人類普遍の6原則(他者を傷つけない、報復できる、善行には返礼、強者は弱者に配慮、約束守る、嘘つかない)も、とりあえず暗記して~自分の言葉で表現して~を繰り返さないと覚えられない。ちなみに、教養とは、「概念知識」の多さだと思ってる。概念ってのは抽象のことだ。その抽象的な表現ができる事柄が多い人を、教養がある人という。モノ・コトの知識がたくさんあっても、教養があるとは言わない。かといって、具体的なことが不要なわけはない。大事だ。だから別に教養が大事だというわけでもない。ただ、創作する上では、たくさんあった方がいいだろう)PR
ちなみに、掲示板とかの入力フォームにJavaScriptしかけたりするというのは何となく分かるのですが、URLにもスクリプトしかけられる、というのがイマイチ分かってなかったりします。URLに、GETとかPOSTメソッドでサーバサイドで受け取れる情報があるのは基本なんですが、スクリプトも実行させられるなら、双方向のWEBサイト以外でも、何でも攻撃対象になりそうな。――其処ら辺はブラウザで対策されてるのかなぁ。まぁそのスクリプトってのがjavascriptなら、オフっておくのが一番セキュリティ対策な気がしますが。