Webデザイナが知っておくべきPHPセキュリティ

たにぐちまこと(H2O Space.)
2008/04/10 08:00

だいたいわかったPHP。だけどもう一つ大切なことがある。それがセキュリティだ。

SQLインジェクション

 データベースと連携するスクリプトになると、その危険性は飛躍的に増すことになる。

 例えば、どこかのWebサイトからダウンロードしたサンプルスクリプトなどを、そのまま内容を理解せずに使ってみたら、次のようなスクリプトが含まれていたとしよう(危険なスクリプトなのでインターネットに公開しないでください)。

mysql_query("SELECT * FROM login_table WHERE id='".$_REQUEST['id']."' 
AND password='".$_REQUEST['password']."'"); 

 このスクリプトは、画像3のようなログインフォームで、記入されたIDとパスワードでデータベースからユーザーを認証し、ログインさせるためのスクリプトである。

画像3 画像3

 しかし、正しい処理が行われていないため、悪意のあるユーザーによってパスワードがなくてもログインができる状態になってしまうことがある。正しい記述としてはこうだ。

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

htmlspecialchars()関数の第2引数について builder編集部の大野です... 続きを見る
» 不適切なコメントを報告する

#2 h2ospace  - 2008/04/10 18:56:57

筆者です。「htmlspecialchars」の件、うっかりしていて大変失礼いたし... 続きを見る
» 不適切なコメントを報告する

#3 がる  - 2008/04/19 01:46:29

本文中に出ている mysql_query("SELECT * FROM login_table WHERE id="... 続きを見る
» 不適切なコメントを報告する

#4 大野晋一  - 2008/04/21 20:39:44

builder編集部の大野です。 シンタックスエラーの件は大変失礼いたし... 続きを見る
» 不適切なコメントを報告する

#5 がる  - 2008/04/22 06:11:44

がるです。 大変に手厳しい発言になり恐縮ではあるのですが。 > ま... 続きを見る
» 不適切なコメントを報告する

#6 大野晋一  - 2008/04/22 17:31:55

ご指摘ありがとうございます。このままでは文字列の IDやパスワードを受... 続きを見る
» 不適切なコメントを報告する

#7 h2ospace  - 2008/04/25 13:33:30

筆者です。 > がるさん ご指摘、および詳しい解説をいただきまし... 続きを見る
» 不適切なコメントを報告する

#8 thesecret  - 2008/05/10 17:46:58

PHPはそもそも「HTMLをちょっと変えれば動くようになります」と... 続きを見る
» 不適切なコメントを報告する
記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ