Webデザイナが知っておくべきPHPセキュリティ
だいたいわかったPHP。だけどもう一つ大切なことがある。それがセキュリティだ。
SQLインジェクション
データベースと連携するスクリプトになると、その危険性は飛躍的に増すことになる。
例えば、どこかのWebサイトからダウンロードしたサンプルスクリプトなどを、そのまま内容を理解せずに使ってみたら、次のようなスクリプトが含まれていたとしよう(危険なスクリプトなのでインターネットに公開しないでください)。
mysql_query("SELECT * FROM login_table WHERE id='".$_REQUEST['id']."'
AND password='".$_REQUEST['password']."'");
このスクリプトは、画像3のようなログインフォームで、記入されたIDとパスワードでデータベースからユーザーを認証し、ログインさせるためのスクリプトである。
しかし、正しい処理が行われていないため、悪意のあるユーザーによってパスワードがなくてもログインができる状態になってしまうことがある。正しい記述としてはこうだ。
mysql_query("SELECT * FROM login_table WHERE
id='".mysql_real_escape_string($_REQUEST['id'])."' AND
password='".mysql_real_escape_string($_REQUEST['password'])."'");
これである程度安全性は保たれる。データベースには、多くの個人情報やパスワードなどの情報が含まれていることも多い。第2回で紹介した「phpMyAdmin」の操作や、このようなデータベースを絡めたスクリプトの作成には、注意に注意を重ね、軽い気持ちで使ったり作ったりするのはやめた方がよいだろう。
この他にも危険は数多く存在する。本サイトでもセキュリティについての記事やニュースは日々更新されているので、見てみると良いだろう。
とはいえ、決して過度に怖がりすぎないで欲しい。もちろん危険性もあるが、それによってスクリプトの楽しさ、便利さを知らないというのも非常にもったいない。
言えることは、スクリプトの危険性が顕著に表れるのはユーザーからの入力を受け付ける時である。今回紹介したスクリプトのように、メッセージの記入を求めたり、それを記録したり、データベースに問い合わせをしたりするスクリプトは、慎重に作る必要がある。
逆に、前回紹介したような「コピーライトの年号を自動的に更新する」とか「パーツを共通化する」など、ユーザーに入力をさせるような機能がないスクリプトには、危険性はほとんどないともいえる。このようなスクリプトであれば十分実用に利用できるスクリプトだろう。
まずは危険のないスクリプトで経験を積み、セキュリティに対する知識を高めながら、さらに多くのスクリプトを作ることができるようになれば、Web制作の世界もぐっと広がるはずだ。是非興味を持っていただけるとうれしい。
- コメント(8件)
#1 大野晋一
- 2008/04/10 14:18:17
#2 h2ospace
- 2008/04/10 18:56:57
#3 がる
- 2008/04/19 01:46:29
- 特集: WebデザイナのためのPHP入門 (4件)
- 昨日のトップ記事
- 2日前
- 3日前
- 4日前
- 5日前
- ホワイトペーパー
- 話題のタグ

#8
動画再生耐久レース―フル充電からどれだけ耐えた?
心当たりありませんか--あなたの上司がイヤがる5つの話し方
フォームデザイン虎の巻:複数の選択肢を提供する
フォトレポート:技術サポートの悪夢
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
JailBreakついに:PwnageTool公開
プロジェクトの進行でよくある4つのトラブル
DELLが掲げる「新・仮想化アセスメントサービス」
ZDNet Japan Green IT
Techno Exchange
ZDNet Japan ホスティング特集