入力のサニタイズ

ユーザーからの入力は必ずチェックする

利用者が入力するデータは、不正なタグや命令が混入していないか必ずチェックしましょう。

サニタイズとは

サニタイズとは、入力されたデータの危険な部分を無力化する操作のことです。 掲示板などでは、訪問者の入力データをそのまま表示すると、Javascript等のスクリプトが埋め込まれてしまう可能性があります。 スクリプト挿入を防ぐには、<のようなタグ(の一部分)を無害になるように変換したり、除去したりするサニタイズ作業が必要になります。

言語仕様により危険なタグ・記号が異なるので、個別言語ごとに対応するサニタイズ作業を行う必要が有ります。

HTMLサニタイズ

掲示板の投稿者にHTMLタグ利用を許可すると、有害サイトをiframeで表示したり、javascriptを埋め込んで自動実行したりされる危険があります。 HTMLタグを除去するには、htmlspecialcharsを利用します。

 $text = htmlspecialchars($_POST['message'],ENT_QUOTES);

シングルクォート(')をサニタイズするには、オプション引数にENT_QUOTESを指定しておく必要があるので注意しましょう。

aimgタグでは、<a href="javascript:...といった記述でjavascriptが実行できます。 このため、URL等は javascript挿入対策として、「javascriptで始まる文字列をサニタイズする」作業が必要になります。

if (substr($_POST['url'],0,10) == "javascript:") {
  die("Illegal URL!\n");
}

SQLインジェクション対策

MYSQLやPostgreSQL等のデータベースを利用したウェブサイトやブログ、CMSも多いですね。 データベースを利用する場合は、不正アクセスをされないように、SQLインジェクション(利用者がプログラムの隙を突いてSQLクエリを実行すること)対策が必要になります。

MYSQLを利用している場合は、mysql_escape_stringを利用してユーザーからの入力をサニタイズします。

$sqldata = mysql_escape_string($_POST['sql']);

PostgreSQLを利用している場合は、pg_escape_stringを利用してユーザーからの入力をサニタイズします。

$sqldata = pg_escape_string($_POST['sql']);
Copyright (C) 2003-2013. PHP で WEB 作成 All rights reserved.