2009-12-1

Chaotic Next Stage                      第10号

                                                  発行責任者  稲崎義明

脆弱性とは(4)

 

Webの説明の続きです。ホームページをプログラムしようとすると使う言語としてはCGIやJavaなどがあります。そしてホームページの脆弱性としては、前回説明したSQLインジェクションがありますが、もっと初期的なものに「クロスサイトスクリプティング」というのがあります。前回も書いたように、ユーザ側はホームページからいろいろな書き込んだデータは、通信回線を通じてWebサイト側に送られその内容によってWebサイト側はそのデータに合わせた情報を提供することとなります。問題はこのユーザ側から提供されるデータです。サイト側としては、送られてきたデータが問題の無いデータかどうかを判断する必要があります。大部分のデータは問題ないのですが、プログラムの一部として使用する文字(たとえば、「“」や「¥」など)がそのまま利用できているようになっていると、ホームページの表示や動作を改竄することができるようになってしまいます。つまり、入力されたデータはよく確認のためそのためのページで表示させますが、そのときにこのチェックが十分でないと途中から表示が変わってしまったり、別のところへ自動でリンクが張られたりすることができます。そのために対処としては、問題のある文字を別のもの(1文字を専用の3文字に置換したり)します。ブラウザなどはどちらでも同じ動作するわけですから、この置換は最低限必要な処理ということができます。また、認証後の動作で、ページを変更するたびにユーザIDやパスワードをやり取りするとしましたが、ここでも処理が必要となります。もちろんパスワードは暗号化したものを送りあうわけですが、この場合の暗号化は同じ結果となります。つまり、パスワードを案語化すると毎回同じ結果になるということです。それは至極当たり前のことで、毎回違う結果になっていてはサイト側としてもあっているかどうかがわからなくなってしまうということですから。ただし、基本的に暗号化したものを複号(元に戻す)ことはできないようなので、よさそうに思えるのですが、毎回同じということは、通信回線上流れているデータを見ることができれば、同じデータを使うことによって「成りすまし」ができる可能性があるということです。他にも、入力するデータの長さを制限して、バッファオーバフローとならないようにする必要などもあります。

Webページを作って、そのページにアプリケーションを組み込んでいろいろなデータを集めたり、ショップを運営したりすることがだいぶ一般化してきています。しかし、Webページを作成するためにはいろいろな対処をしなければならないということを十分理解したうえではじめる必要があります。特に2008年以降大規模なホームページの改ざんが頻発し、ウィルスがそのために感染拡大することになっています。特に、Web経由のウィルスはなかなか防御することができません。そのためにも作成側の努力が必要なのですが、この場合も新しい方法が間が出されるなど段々対処が大変になっていることは事実のようです。また、Webサイトの改ざんの場合、外面上まったく変化が無く、ソースを表示したりして初めて気づくということも多くあります。サイトでデータベースを利用しているときは特に注意が必要で、定期的にデータベースの内容をチェックするや、ホームページのソースの変化をチェックするなど日々の対処が大切ということです。しかし、インターネットはここまで普及してくるとなかなか「無し」というわけにはいかなくなってしまいますが、いろいろな危険があることも頭のどこかにおいた上で使ってもらいたいものと考えます。

SQLインジェクションについてもいろいろ書いてみたいのですが、これまでいくつか作ったWebページではデータベースを使ったことが無いもので、その部分については割愛します。      (次回へ続く)