builder by ZDNet Japanをご愛読頂きありがとうございます。

builder by ZDNet Japanは2022年1月31日にサービスを終了いたします。

長らくのご愛読ありがとうございました。

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

たにぐちまこと(H2O Space.)
2008-04-10 08:00:00
  • このエントリーをはてなブックマークに追加

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制作の世界もぐっと広がるはずだ。是非興味を持っていただけるとうれしい。

ブログの新規登録は、2021年12月22日に終了いたしました。

folllow builer on twitter
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]