管理人はプログラム言語は最近ではPHPを使用することが多いです。PHPはいわゆるライトランゲージに属する言語です。そのため何の意識をしないでコーディングをすると可読性が低くなおかつ可用性の低いプログラムソースを作成することになります。。。
自戒の念を込めて下記にPHPでのコーディング作業の注意点を記しておきます。
1.コーディング規約を守る。
組織にコーディング規約がないなら、Zend Framework PHP標準コーディング規約 [zend.com]を使う。
Zend Framework: Documentation
http://framework.zend.com/manual/ja/coding-standard.html
2.内部コードにはEUC-JPかUTF-8を使う。
入出力はできるだけShift JISを避ける。
Shift JISを使う場合には2byte目に0x5C(ascii codeで\を表す)を含む文字の動作を忘れずに確認する。
-参考資料-
Shift_JIS文字コードにおいて2バイト目に0x5cを持つ文字の一覧です。
― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃
濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡 纊 犾
対処法
問題の文字の直後に\を付け足すと、問題が発現しても \\(文字\を表す)エスケープが成立し、\が一個減り、一個残る。
これで第2バイトは変化せず、正しく表示される。
3.開発環境の警告レベルをE_STRICT(厳しいエラーチェック)にする。
開発時には変数初期化の警告レベルから表示させる。本番環境ではエラー警告が表示しないようにする。
(webサーバの攻撃者に攻撃をするための情報を与える可能性があるため。)
4.register_globals、magic_quotesはオフにする。
register_globalsがonの場合、グローバル変数を変数化してしまうため。コーダの予期しない変数を外部から初期化する可能性がある。
magic_quotesがonの場合、XSS、SQLインジェクション、両方とも場当たり的対処をしていると問題が発生しやすくなる。
5.PHP開発用のエディタを使用する。
入力補完を積極的に使うことにより命令の打ち間違いをしないようにする。
6.プレゼンテーションとロジックを分割すること。
プレゼンテーションには変数または関数の出力とループ以外のロジックを残さないこと。
ロジックの中で直接出力をしないこと。
7.SQL文に変数を埋め込むときには変数をサニタイジングすること。
サニタイジング:外部からの入力コードに含まれる命令文や特殊文字を他の文字に置換する(無毒化)
8.リクエストから取得したパラメータもサニタイジングする。
出力するときはhtmlspecialcharsを使う。
9.グローバル変数の直接使用を避ける。
グローバル変数を使用するときはローカル変数に代入して使用する。
10.変数を定数として使わない。
定数はdefineで定義するか、const宣言する。
11.常に最新バージョンでテストできる環境を作る。
サービス開始後もバージョンアップに対応するための予算をとっておく。
12.継承を使うなら、クラス図を書いておく。
単にコードを再利用したいだけなら、移譲を検討すること。(component パターン)
13.各URLにおけるパラメータとその閾値を文書化すること。
14.既存のフレームワークを学習することに投資すること。
15.設計を重視すること。
16.リファクタリングの時間をスケジュールに入れること。
17.require/includeを条件文や関数宣言の中に記述しないこと。
18.例外処理を念頭にプログラムを作成すること。
19.コメント文を必要に応じて記入すること
ざっと箇条書きのように記しました(他のサイトからの借用もあります)。コーディング時の最大の指針は他の人が自分のプログラムを見ても可読できるかを常に念頭に置いて作業をすることだと思います。