| 前回に引き続き、入力値の正規化を行う。今回は文字列を扱う。 |
|
ユーザーから入力された文字列をそのまま(または少しだけ加工して)画面に echo や echo で出力するプログラムを見かける。これは非常に危険である。 まず第一に、入力文字列の中に HTML タグや JavaScript が含まれていると、プログラマは意図していないにもかかわらず、そのまま実行されてしまう。 より危険なのが、入力文字列にスクリプトや CGI が書かれている場合である。プログラムの書き方によっては、そのまま実行されてしまうことがある。下手をすると、パスワードが漏れたり、データベースの内容が改竄されてしまうことがある。 そこで今回は、入力された文字列に次のような正規化を施してから扱うプログラムを紹介することにする。
「ページ間での文字化けを解消する」で説明したように、ページ間で日本語文字列を渡す際、環境によっては文字化けが発生してしまう。まず、これを解消するために文字コード変換を行う 次に、あらかじめ決められた長さより長い文字列を受け付けないようにする。 データベース登録などの場合、文字列の長さ制限があるため、このようなチェック仕様を設けた。 最後の文字エスケープは、前述の HTML タグ、JavaScript、PHP や CGI などのスクリプトの実行を阻止するためのエスケープ処理である。これは、行う/行わないの選択ができるようにした。 |
サンプル・プログラム |
|
|
テキストボックスに値を入力し、[送信] ボタンを押下する。 値は POST で渡され、前述の正規化が行われた結果が出力される。 |
|
サンプル・プログラムの解説:文字列の正規化 |
|
|
0056: /** |
|
|
ユーザー関数 getValidString1 にて文字列の正規化を行う。
まず、関数 mb_convert_encoding を使って、文字化けしないようにコード変換を施す。 次に、関数 strlen を使って、文字列長のチェックを行う。 ここではバイト長でチェックしているが、本当に文字列長でチェックしたいのであれば、関数 mb_strlen を使うと良いだろう。 最後に、文字列のエスケープ処理を行う。これは関数 htmlspecialchars にお任せである。この関数は、'<' を '<' に、'>' を '>' に置き換えてくれるので、HTML タグ、JavaScript、各種スクリプトが実行される可能性はほとんど無くなる。 その他の処理は、前回とほぼ同じである。 |
参考書籍 |
|
|
|
(この項おわり)
|
|
|
|
|
2009年10月13日 作成
2009年10月13日 更新
Copyright by studio pahoo, (C)2009
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 ★本ページへのご意見・ご質問・お便りは、ここをクリックしてください。 |