初級PHPプログラマがおかしがちなミスTOP10
2007年01月08日
スポンサード リンク
The PHP coder's top 10 mistakes and problems @ SourceRally.net PHP Community
「PHPプログラマがおかしがちなミスTOP10」、という記事があったので紹介。
PHP初心者だとこういうミスがよくありますね。ということで今年からPHPをはじめようと思っている人には気をつけてほしいリストです。
- 生でクエリを出力しない
echo $_GET['username'];
↓
echo htmlspecialchars($_GET['username'], ENT_QUOTES);
やらないとクロスサイトスクリプティングされます。 - SQLクエリに$_GET,$_POST,$_REQUESTの値を直接含めない
$sql = "select * from table where id=".$_GET["id"];
↓
$sql = "select * from table where id=?"; (プレースホルダを使う)
やらないとSQLインジェクションされます。 - header, session_start, setcookieを何か出力した後に実行
悪い例)
echo "HOGE";
header("Location:/html/");
↓
// echo "HOGE";
header("Location:/html/");
出力処理を先に行うとちゃんとheader関数が実行されません。session_start, setcookieも同様。
何かの出力処理の前に実行したい場合は出力をバッファリングしておいて、header呼び出しの後にバッファを出力する。 - ユーザクエリを元にincludeしない
include($_GET["filename"]);
そもそもこういったコーディングは危険なので避けるべきです。サーバにあるファイルが覗かれてしまいます。
php.iniのopen_basedirによる制限などもしておいた方がよいですね - php.iniのmagic_quotes設定による自動エスケープの罠
このオプション設定によって ' , " , , NUL が自動エスケープされますが、それによってデータにエスケープ文字がはいってしまうという問題がありますね。
addslashes関数による2重エスケープなんかも起こることがあります。
マニュアルに、「マジッククオートは、PHPスクリプトに入力されるデータを 自動的にエスケープする機能です。 コードでは、マジッククオートをオフにして 実行する際必要な時にデータをエスケープすることが望まれます。」とあるので、それに従った方が良さそうです。
オープンソースなプログラムなんかでは、phpの設定は関係なく、どのサーバでもちゃんと動くようにget_magic_quotes_gpc関数によって設定を調べてstripslashesで取ったりする必要がありますね。
※なぜかMTでエラーが出るので半角$を全角にしています。読み替えてください
これらに限らず、WEBプログラミングする際は、基本的なセキュリティの知識が必要なので「IPA ISEC」なんかで学べます。
その他、開発スタイルに関する推奨
- メモ帳などの使いにくいエディタはやめる
構文エラーを避けるためよいエディタを探して開発を効率化しよう、という指摘 - オブジェクト指向しよう
メンテナンスしづらくなるのでオブジェクト指向を知らない場合は学びましょうという指摘。
これはPHPに限りませんね。(PHPオブジェクト指向) - フレームワークを使わない開発
規模やプログラムによってはフレームワークを使わない方が早いですね。
なんでもフレームワークで作るという発想はやめた方がよいですが、便利な部分では使ったほうがよいと思います。 - 標準関数をもっと知ろう
便利な関数がいっぱいあるので、知っていると同じものを何回も作らなくて便利です。
この機能を作ったけど後から標準関数であったのか、と気づくことはphpをやっていてよくあることです:-) - 古いバージョンのPHPは使わない
頻繁にセキュリティアップデートなどが行われているので最新のバージョンを使うようにしましょう。
といってもPHP4とPHP5の最新バージョンは違うので注意が必要です。
PHPを知っている人には何を今更といわれそうなことを書いていますが、初心者の方には有益だと思われるので敢えてまとめてみました。
関連サイト
スポンサード リンク
投稿者 KJ : 2007年01月08日 12:06
|
![]()
間違いの指摘をしていただける方はメールでお願いします
(追記)htmlspecialcharsの引数を修正しました。ご指摘いただいた方、ありがとうございます
最新のブログ記事
- Facebook風のサムネイル付きサジェストボックスを実装するサンプル
- 2009年7月3日 管理人のブックマーク
- PHPとCSSで動的に綺麗なパーセンテージグラフを描画サンプル
- 普通の写真をすばらしいアートにするためのPhotoshopチュートリアル集
- シマシマの見やすいテーブルを作成するMooToolsプラグイン「ZebraTable」
- 2009年7月2日 管理人のブックマーク
- 「フォローしてね」を表すTwitterアイコン集
- シンプルなTwitter検索を行うためのPHPスクリプト
- PHPのcURLを使ってできる便利なサンプル集
- 2009年7月1日 管理人のブックマーク
- iPhone3.0の緯度経度APIで移動履歴を地図描画するサンプル





















