Webサイトの安定稼働に向けて
Webサーバーのセキュリティー強化
これまで3回にわたり、Webサイトのユーザビリティ・アクセシビリティ向上を支援するサーバーサイドの機能を紹介しました。今回はそこから少し離れて、一般的なWebサーバー管理の事柄に触れたいと思います。
Webサーバーの管理で最も重要な要素の1つがセキュリティーです。この連載で扱っている.htaccessの機能は比較的安全なものですが、それでも不注意でWebサイトに穴を開けてしまう可能性はあります。第2回(http://www.thinkit.co.jp/article/134/2/)でも共有キャッシュの誤った使用法による情報漏えいを紹介しましたが、それ以外にもさまざまなパターンがあります。
セキュリティー・リスクのすべてを網羅するのは難しいのですが、以下で比較的簡単に実践できる一般的な注意点を5つ挙げておきます。
運用上の注意点
1つ目は、「.htaccessの数を抑える」です。
.htaccessは便利な機能ですが、無計画に使うと設定ファイルが分散してしまい、Webサイト全体の設定が把握しづらくなるという欠点があります。設定が把握できていないと、設定変更を繰り返すうちに誤った設定をしてしまいがちです。ディレクトリ構成を工夫して、できるかぎり.htaccessの数を減らすようにしましょう。
2つ目は、「公開ディレクトリに余計なファイルは置かない」です。
ほかの会社が管理していたWebサイトを引き継いだりすると、公開ディレクトリにバックアップファイルが大量に残っていたりします。これは非常にまずい習慣です。特にCGIやPHPを「.bak」などの拡張子で保存すると、スクリプトのソースがそのまま公開されることになります。開発作業は非公開の領域で行い、公開ディレクトリには余計なファイルを置かないようにしましょう。
3つ目は、「ファイルのパーミッションに注意する」です。
一般的なUNIX系OSでは、個々のファイルに対して所有者(U)、グループ(G)、ほかのユーザー(O)それぞれに読み込み(R)、書き込み(W)、実行(X)の3つの権限(パーミッション)を設定できます。このパーミッションを可能な限り制限することで、セキュリティーを高めることが可能です。例えば、CGIスクリプトや静的なHTMLファイルなどは所有者(もしくはグループ)のみに書き込み権限を与えることで、コンテンツの改ざんを防げる場合があります。
4つ目は、「外部入力は可能な限り制限を設ける」です。
第3回(http://www.thinkit.co.jp/article/134/3/)で紹介した「表示言語をCookieに保存する」設定では、認識する言語を日本語(ja)と英語(en)のみに制限しています(リスト1の赤の部分)。もしこのような制限を設けず、外部入力をそのままHTTPヘッダに挿入してしまうと、HTTPヘッダ・インジェクション(http://www.ipa.go.jp/security/vuln/vuln_contents/hhi.html)という攻撃を受ける場合があります。外部からの入力はすべて信頼できないという意識を持ち、可能な限りの制約を設定するようにしてください。
5つ目は、「CGI実行許可などの設定は必要最低限のディレクトリに絞る」です。
例えば、画像の添付が可能な掲示板などでファイルの拡張子を制限していないと、悪意のあるCGIスクリプトのアップロードを許す結果になります。そのような場合でもアップロード先ディレクトリでのCGI実行が禁止されていれば、スクリプトが実行されてしまう最悪の事態を回避できます。リスト2の内容をトップディレクトリの.htaccessに記述し、デフォルトでは各種機能を無効にするのがよいでしょう。
また、SSIに関しては、第1回(http://www.thinkit.co.jp/article/134/1/)、第2回(http://www.thinkit.co.jp/article/134/2/)で使用している「Options +Includes」の代わりに「Options +IncludesNOEXEC」を使うことで、SSIによるコマンド実行を抑制できます。コマンド実行が必要なければ、後者を使いましょう。
これらの注意点を意識するだけでも、セキュリティーはずいぶん向上するはずです。思い当たる点があれば、改善しましょう。
次のページでは、ログの解析について解説します。