セキュリティ対策をする理由
そもそも、どうしてセキュリティを意識する必要があるのか、というところから確認してみます。
例えば、PHPを使ってwebベースのアプリケーションを構築することになった場合、最終的には誰かしら自分以外のユーザーが使う形になることがほとんどだと思います。
それはクライアントからの受注制作ではもちろん、個人的に作るwebサービスにしても同様です。
ユーザーがいる以上、ユーザー自身のデータをシステム上で扱う機会が出てきますよね。
SNSを利用している方は特に心当たりがあるはずです。
ログインするには「メールアドレス」や「パスワード」を使用し、ログインした後のページではユーザー名を表示するために「氏名」や「ニックネーム」なんかを使います。
ECサイトであればさらに、ユーザーへ商品を届けるための「住所」や「電話番号」が必要となるかもしれません。
ここで開発・運営側が注意しなければならないのは、ユーザーは「このアプリケーションはセキュリティ対策がしっかりされているはず」を前提に利用しているということです。
もしも、自分が使っているアプリケーションで「会員情報10万件流出」なんて見出しの記事を発見したらどうでしょうか。
「自分のデータも含まれているのかな」「あまり使いたくない」などネガティブイメージは避けられませんし、一度失ってしまった信頼を取り戻すことは困難です。
アプリケーションのユーザーが増えるにつれて、脆弱性を突いた攻撃に遭遇する確率も上がっていきます。
ここでしっかりと対策を講じていないと、上記のようにユーザーのデータを不正に取得される事故に繋がる可能性が高いです。
そんな「起こってからでは遅い事故」を未然に防ぐために、セキュリティ対策はマストです。
脆弱性はどこに潜んでいるか
脆弱性が発見される場所は、大きく分けると次の4つになります。
- アプリケーション
- PHP
- WEBサーバー&データベース
- サーバーのネットワーク環境
1つずつ見ていきましょう。
まずはアプリケーションです。これはPHPを使って構築するシステム自体を指します。
プログラムのコードをどう組むかに掛かっているので、最も脆弱性が発生しやすく、かつセキュリティを意識するべき場所です。
2つ目の「PHP」は自分たちが書いたプログラムのことではなく、PHP本体を指します。
2015年5月現在は5.4系、5.5系、5.6系と3種類の安定版があります。
PHP本体に脆弱性が発見された場合は、すぐに修正版へアップデートするようにすれば基本的に問題ありません。
共有型レンタルサーバーを使用している場合は、サーバー会社から対応いただけるので気にしなくて大丈夫です。
3つ目の「WEBサーバー&データベース」もPHP本体と同様、脆弱性が発見されたときに修正版へアップデートするようにすれば大丈夫です。
こちらも共有型レンタルサーバーを使っている場合は、サーバー会社の対応に委ねることとなります。
専用サーバーの場合、アプリケーションの更新以外にセキュリティを意識した設定にチューンする必要があります。PHPの範囲ではないので、ここでは割愛します。
4つ目はサーバーの動いている場所、サーバーとインターネットを繋いでいる環境などの、所謂「ネットワーク構成」です。
物理的な問題もあるので、自前サーバーでない限りはどうすることもできません。
ただし、盗聴を防ぐなど通信自体のセキュリティを上げる意味で「SSL」(HTTPS通信)が効果的なため、導入をオススメします。
以上4つの箇所を見てきましたが、PHPのプログラムを組まれる方が最も意識するべきは1つ目の「アプリケーション」です。
サーバーの種類に関わらず対策可能な箇所でもあるので、しっかりと対策したいポイントです。
そこで次に、具体的にどのような対策を取っていけばいいのか見ていきましょう。
代表的な脆弱性を突いた攻撃方法
対策を講じる際に参考になるのが、脆弱性を突いた攻撃の種類を知ることです。
攻撃方法が分かっているものは、具体的に策を講じて備えることができます。
主に、次に並べる15種類の攻撃方法があります。
- スクリプト埋め込み攻撃(Script Insertion)
- クロス・サイト・スクリプティング(Cross Site Scripting)
- クロス・サイト・リクエスト・フォージェリ(Cross Site Request Forgeries)
- SQLインジェクション(SQL Injection)
- セッションハイジャック
- 変数汚染攻撃
- HTTPヘッダインジェクション
- スパムメール踏み台攻撃
- ファイルアップロード攻撃
- nullバイト攻撃
- ディレクトリ・トラバーサル(Directory Traversal)
- eval利用攻撃
- インクルード攻撃
- パス・ディスクロージャ
- コマンド実行攻撃(Command Injection)
どこの脆弱性を突くかはそれぞれ異なりますが、以降の章で1つずつ攻撃内容と対策方法を解説していきます。
ここでは、これだけの攻撃方法があるという程度で大丈夫です。
まとめ
以上、PHPプログラミングにおけるセキュリティ対策の重要性と、脆弱性を突いた攻撃方法を確認してきました。
次章からの具体的な対策方法を学び、よりセキュア(セキュリティ基準が高いことを意味します)なアプリケーションを作るための方法を身につけていきましょう。
- アプリケーションは、セキュリティ対策をする前提で開発を進める
- PHPアプリケーションの脆弱性を突く攻撃は、代表的なもので15種類ある
- PHP以外に、利用しているサーバーのセキリュティも配慮する
- 通信のセキュリティ強化のためにSSL(HTTPS通信)の導入を考える