入力のサニタイズ
ユーザーからの入力は必ずチェックする
利用者が入力するデータは、不正なタグや命令が混入していないか必ずチェックしましょう。
サニタイズとは
サニタイズとは、入力されたデータの危険な部分を無力化する操作のことです。 掲示板などでは、訪問者の入力データをそのまま表示すると、Javascript等のスクリプトが埋め込まれてしまう可能性があります。 スクリプト挿入を防ぐには、<のようなタグ(の一部分)を無害になるように変換したり、除去したりするサニタイズ作業が必要になります。
言語仕様により危険なタグ・記号が異なるので、個別言語ごとに対応するサニタイズ作業を行う必要が有ります。
HTMLサニタイズ
掲示板の投稿者にHTMLタグ利用を許可すると、有害サイトをiframeで表示したり、javascriptを埋め込んで自動実行したりされる危険があります。 HTMLタグを除去するには、htmlspecialcharsを利用します。
$text = htmlspecialchars($_POST['message'],ENT_QUOTES);
シングルクォート(')をサニタイズするには、オプション引数にENT_QUOTESを指定しておく必要があるので注意しましょう。
a、imgタグでは、<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-2018. PHP で WEB 作成 All rights reserved.