はじめに
当サイトの定期コンテンツとして、「安全システム構築のための10の掟」の連載を始めます。これからもどうぞよろしくお願いします。企画・作成はPHP逆引きレシピの著者の1人である安藤建一が担当します。
連載を始めるにあたり
どうも。安藤です。みなさんはじめまして。今回からWeb連載を始めます。
少し前くらいから、中国のクラッカーから侵入被害にあった云々というニュースを耳にしますね。これらは事件の性質上、詳しく知ることが難しいのですが、間違いない点として、我々の世界も決して例外ではないということを知っておくべきでしょう。身近な例だとクレジットカード情報や個人情報流出などがありますね。
私を含めた開発者は、お客様ご自身がセキュリティ対策について詳しい or 詳しくないに関係なく、重要なテーマとして常に取り組んでいます。お客様は「セキュリティ対策のお話=難しい」と考える方も多いでしょう。残念ながら世の中にはセキュリティ対策のことをあまり考えない開発者と開発会社が存在しています。発注者側であるお客様側でも多少はセキュリティ対策について学んでおかないと、そんな開発者に発注してしまい、大事故に繋がってしまう恐れがあります。
そんな難しそうなセキュリティ対策について、少しでもわかりやすく解説していこうと思います。

第1回 セキュリティ対策の基本について
そもそもセキュリティ対策には、数多くのジャンルがあり、その中でも我々に最も関係のあるWEBアプリケーションへのセキュリティ対策について解説します。
インターネット上には、ブラウザ上で動くアプリケーションが数多くあります。簡単なものだと、「お問い合わせフォーム」ですね。多くのホームページには必ずと言ってよいほどこの「お問い合わせフォーム」が付いていますね。みなさんの会社のホームページにもついているのではないでしょうか?
お問い合わせフォームを含むWEBで動くアプリケーションへの攻撃方法は、非常にたくさんあります。今日も新しい手法が誕生しているかもしれません。とても怖い話です。しかし以下に挙げる3つの対策を講じておけば攻撃を回避できることが多いと言われています。
- 入力値の厳格な検証
- 出力時の適切なエスケープ
- 多重防御

入力値の厳格な検証とは?
「入力値の厳格な検証」と読むと難しそうに思えます。決して難しくありませんので、読み進めてください。
お問い合わせフォームを例にわかりやすく説明します。
お問い合わせフォームには、「お名前」、「メールアドレス」、「お問い合わせ内容」の3つが必ずあり、他にフォームで必要な項目が足される程度だと思います。これらの「お名前」や「メールアドレス」に入力される値を「入力値」と呼びます。
この入力値が「お名前」だった場合、普通の人、例えば私なら「安藤建一」と入力しますが、悪いことをたくらんでいる人は名前なんか入力しません。
- システムを破壊するような危険な文字列
- 読む人に害を及ぼすような文字列
などを入力します。入力値の厳格な検証を施したシステムであれば、名前以外の目的を持った文字を決して受け付けません!システムを破壊するような文字は存在するのです。発注する開発会社に必ず確認するようにしましょう。
出力時の適切なエスケープ処理とは?
上の同じようにお問い合わせフォームを例にわかりやすく説明します。続けて最後までお読みください。
お問い合わせフォームで、無事に「入力値の厳格な検証」を潜り抜けたとしても、データはどこで改ざんされるかわかりません。これは残念なことなのですが、社内でそのような不正を働くものが100%いないと断言できません。つまり厳格な検証を通過したデータでさえも、信用してはならないということです。
お問い合わせフォームから誰かが問い合わせをすれば、受け付けた側の誰かが必ず文章を読みます。当たり前ですよね。会社であれば、広報担当かもしれません。営業かもしれません。そんな方々に向けて、コンピュータウィルスへ誘導するような危険なタグが仕込まれていて、お問い合わせフォームを開いてリンクをクリックしたらウィルスに感染してしまう可能性があります。ウィルスに感染してしまうと、社内中大騒ぎになります。大切な顧客情報などが流出してしまうのではないかと大変深刻な事態にまで発展します。
危険なデータを含む可能性があると常に考え、ブラウザに表示させる(出力する)前に、必ず適切なエスケープ処理を施す必要があります。怪しいリンクがあれば事前に消してしまうということです。
「出力時の適切なエスケープ処理はできていますか?」と開発者にお尋ねください。
多重防御とは?
上記の「入力値の厳格な検証」と「出力時の適切なエスケープ処理」を行ってもセキュリティ対策としては、十分ではない場合があります。
プログラム言語そのものにバグがあったり、ロボットにパスワード解読の作業をさせたり、セッションをハイジャックしたりと、攻撃者は決して手を緩めることはないでしょう。セキュリティホール(セキュリティの穴)を必死になって探します。
例えば、お問い合わせフォームに「画像認証コード」を付けるなどして、ロボットの自動送信を防いだり、ワンタイムチケットと呼ばれる対策を講じたり、本当に重要な処理にはパスワードを付けるなどの工夫が必要です。攻撃者もパスワードは知りませんので、パスワード解析を含めると時間がかかり、諦めてしまうかもしれません。
重複するような対策であっても適所でキッチリ対策をしておけば、1つの対策が破られても、、もう1つの対策が効果を表すことがあります。このような多重の対策を「多重防御」と呼びます。発注する開発者に訪ねてみましょう。
最後に、
「昨日まで安全と言われた対策手法が、今日から危険なセキュリティホールになった」
ということは必ずあります。身を引き締めて対策に精進を努めます!!
※ロボットの自動送信防止は正確にはセキュリティ対策でとはジャンルが異なります。
それでは、次号もよろしくお願いします。 株式会社音生 安藤建一