WEB/システム/IT技術ブログ

SQLインジェクション対策など踏まえPHPでPOSTされた文字列の処理を考える

PHPでアンケートフォームやメールフォームを設置する場合に、POSTされたデータの処理を考えます。
作業する度に、毎回考えさせられるような事なので、ここでメモとして残しておきます。

まず、POSTされたデータは、DBに格納する、ファイルに書き出す、メールで送信するなどのアウトプットが考えられるので、それぞれに応じた文字コードに変換してあげる必要があります。例えば、UTF-8に変換したいのであれば以下のように処理します。

mb_convert_encoding($str, "UTF-8", "auto");


次に、POSTではhtmlタグなどを送られることがあります。掲示板などでは自由にhtmlタグを許可すると、意図しない画像やリンクを貼られる恐れがあります。そこで特殊文字をHTMLエンティティに変換します。こちらについては以下のように処理します。

htmlspecialchars($str);

あと曲者としてはPHPの機能である「magic quotes」ですね。これは悪意のあるSQLを埋め込まれないよう、シングルクォート「’」を「’」にエスケープするものです。SQLインジェクション対策なんてのはDB接続ライブラリなんかで処理すればよいものなので、こんな機能は使いません。実際、PHP6ではこの機能の廃止が決まっているようです。
サーバ設定などでこの機能が有効となっている場合があるので、その場合は戻し処理をする必要があります。「get_magic_quotes_gpc()」でサーバ設定で有効になっているかどうかを判定して、真の場合はエスケープ文字を取り除く「stripcslashes($str)」。

上記の処理を関数としてまとめました。

function enc($str){
	$str = htmlspecialchars(mb_convert_encoding($str, "UTF-8", "auto"));
	if(get_magic_quotes_gpc()){
		$str = stripcslashes($str);
	}
	return $str;
}

ちなみに、テキストエリアで入力されたものをHTML画面上に出力する場合は、改行コードを<br />タグに置換する処理を加えてあげればよいですね。

$str = nl2br(enc($str));
B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives