前の記事 ≪:PHPとAjaxを使った写真管理WEBシステム「Phormer」
次の記事 ≫:XHTMLを編集できるWYSIWYMエディタ「WYMeditor」

初級PHPプログラマがおかしがちなミスTOP10

2007年01月08日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法

The PHP coder's top 10 mistakes and problems @ SourceRally.net PHP Community

「PHPプログラマがおかしがちなミスTOP10」、という記事があったので紹介。
PHP初心者だとこういうミスがよくありますね。ということで今年からPHPをはじめようと思っている人には気をつけてほしいリストです。

  1. 生でクエリを出力しない
    echo $_GET['username'];

    echo htmlspecialchars($_GET['username'], ENT_QUOTES);

    やらないとクロスサイトスクリプティングされます。
  2. SQLクエリに$_GET,$_POST,$_REQUESTの値を直接含めない
    $sql = "select * from table where id=".$_GET["id"];

    $sql = "select * from table where id=?"; (プレースホルダを使う)
    やらないとSQLインジェクションされます。
  3. header, session_start, setcookieを何か出力した後に実行
    悪い例)
    echo "HOGE";
    header("Location:/html/");

    // echo "HOGE";
    header("Location:/html/");
    出力処理を先に行うとちゃんとheader関数が実行されません。session_start, setcookieも同様。
    何かの出力処理の前に実行したい場合は出力をバッファリングしておいて、header呼び出しの後にバッファを出力する。
  4. ユーザクエリを元にincludeしない
    include($_GET["filename"]);
    そもそもこういったコーディングは危険なので避けるべきです。サーバにあるファイルが覗かれてしまいます。
    php.iniのopen_basedirによる制限などもしておいた方がよいですね
  5. php.iniのmagic_quotes設定による自動エスケープの罠
    このオプション設定によって ' , " ,  , NUL が自動エスケープされますが、それによってデータにエスケープ文字がはいってしまうという問題がありますね。
    addslashes関数による2重エスケープなんかも起こることがあります。
    マニュアルに、「マジッククオートは、PHPスクリプトに入力されるデータを 自動的にエスケープする機能です。 コードでは、マジッククオートをオフにして 実行する際必要な時にデータをエスケープすることが望まれます。」とあるので、それに従った方が良さそうです。
    オープンソースなプログラムなんかでは、phpの設定は関係なく、どのサーバでもちゃんと動くようにget_magic_quotes_gpc関数によって設定を調べてstripslashesで取ったりする必要がありますね。

※なぜかMTでエラーが出るので半角$を全角にしています。読み替えてください

これらに限らず、WEBプログラミングする際は、基本的なセキュリティの知識が必要なので「IPA ISEC」なんかで学べます。

その他、開発スタイルに関する推奨

  1. メモ帳などの使いにくいエディタはやめる
    構文エラーを避けるためよいエディタを探して開発を効率化しよう、という指摘
  2. オブジェクト指向しよう
    メンテナンスしづらくなるのでオブジェクト指向を知らない場合は学びましょうという指摘。
    これはPHPに限りませんね。(PHPオブジェクト指向
  3. フレームワークを使わない開発
    規模やプログラムによってはフレームワークを使わない方が早いですね。
    なんでもフレームワークで作るという発想はやめた方がよいですが、便利な部分では使ったほうがよいと思います。
  4. 標準関数をもっと知ろう
    便利な関数がいっぱいあるので、知っていると同じものを何回も作らなくて便利です。
    この機能を作ったけど後から標準関数であったのか、と気づくことはphpをやっていてよくあることです:-)
  5. 古いバージョンのPHPは使わない
    頻繁にセキュリティアップデートなどが行われているので最新のバージョンを使うようにしましょう。
    といってもPHP4とPHP5の最新バージョンは違うので注意が必要です。

PHPを知っている人には何を今更といわれそうなことを書いていますが、初心者の方には有益だと思われるので敢えてまとめてみました。

関連サイト

関連の記事検索:PHP
スポンサード リンク

By.KJ : 2007年01月08日 12:06 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)

(追記)htmlspecialcharsの引数を修正しました。ご指摘いただいた方、ありがとうございます