安全なウェブアプリケーションの作成?運用?閲覧?

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践』 という本を読みました。

私は(WEB上のマニュアルやドキュメントであればともかく)脆弱性を専門に扱った書籍に触れるのは初めて、フロントエンドも専門外なので、知らないことが幾つも掲載されていて勉強になりました。

脆弱性の実物に触れることを重視していると筆者が前文に書かれているように、主にWEBブラウザ操作に関連する脆弱性とそれに関連した攻撃手法が具体的に解説されており、配布されている実習環境を用いて脆弱性を体験できる構成になっています。

その内容もSQLインジェクション、OSコマンドインジェクション、スピアフィッシングと言ったよく知られたものから文字コードの取り扱いやファイルアップロードに関連する脆弱性まで詳しく説明されています。

本書のタイトルこそ『安全なWebアプリケーションの作り方』ですが、作る側よりもむしろ(ブログソフトウェアやアップローダを使用したサイトの管理者を含めた)使う側に向けたメッセージなのではないかと思わせる項目も少なからずあります。

少なくともクリックジャギング(詳しくは本書を読んでください)などの一部の項目に関しては、意図して実装するのは攻撃者だけなのではないかという感想を抱きます。これだけに関して言えば、脆弱性を把握していなければならないのは閲覧者です。

作成者と利用者(プログラムを利用したウェブサイト・サービスの管理者を含む)のどちらに向けて書かれた内容なのだろうという疑問は読中は常につきまといます。




セキュリティ意識の高くない私でも知っているようなことは多くの人がおそらく理解しています。

そんな私でも(過去に見たことがないから)きっと自分でも書かないようなコードが危険で非推奨となっている例などをみると、ウェブアプリケーションの利用者側に向けて書かれた内容なのだろうかという思いを改めて強くします。

もちろん作成者だけでなく、それを利用する管理者や閲覧者が脆弱性を把握して対策することが重要なのは言うまでもないことです。しかし、誰がどこまで把握しておくべきなのかを考えると線引きは簡単ではありません。

プログラミング言語を専門にしていないウェブデザイナが JavaScript ライブラリを多用したり、コンテンツ管理システムを使ってウェブサイトを自作したりすることは特に珍しいことではありません。

ところが最新の情報セキュリティを継続的に学び続けているのは、誠に失礼ながら専門家を除けば、知っておかなければならない立場にある一部の開発者や管理者に限られる印象を受けます。

本書の内容も、ウェブの利用者なら誰も知っていて損はないものですが、具体的な対策となるとソースコードを見た瞬間に、サーバやデータベースやウェブブラウザで何が起こるかを把握できないとどうしようもありません。

取り上げられている事例だけでも、呆れるほど多彩な手段で執拗にセッションやクッキーが狙われていることが分かったり、インジェクション攻撃でどれだけ簡単に情報を盗んだり、システムを破壊したりすることができるのかを実例を通して理解でき、実習環境上で簡単に再現できる(責任者の説得にも使える)という点では誰にとっても有益ですが、そこから更に進んで対策を行う段階ではウェブブラウザやOSだけでなくプログラミング言語や文字コード、さらには通信の仕組み等についても正確な理解が必要とされるのが難しいところです。

実習環境では主に PHP が用いられているものの、正規表現など基本的な知識を有していれば、PHP を知らなくても問題なく読めます。

自分で PHP を書くことはありませんし、PHP や Perl の CGI を扱うぐらいならば、よく使われている Java や Ruby で良いのに(個人的にはサーバサイド JavaScript/TypeScript 推し)ぐらいには思っていますが、そんな私でも言語の問題で躓くことはありませんでした。

ただし、HTMLメソッドやブラウザやサーバの機能についての理解は必要ですし、本書に詳しい説明はありませんので全く知識のない方は、先にウェブプログラミングを対象とした書籍を何冊か読まれたほうが良いかと思われます。対象の都合上、どうしてもソースコードやログを読み込んでいかないと本書の内容を完全には理解できません。

このように(解説は平易でわかりやすいのですが)敷居はそれなりに高いので誰にでも薦められるわけではないものの、アプリケーションを作る開発者だけでなく利用者にとっても有益な良書という感想を抱きました。

だからこそ、誰に向けて書かれたセキュリティの入門書なのだろうという疑問が生じるのかもしれません。

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Us