次のような記事を参照しました。
http://marijuana.ddo.jp/download/xoops_tips.htmlQuote:
モジュール作成時に間違えやすいサニタイズ
XOOPSのサニタイズクラスには、stripSlashesGPCとaddSlashesがありますが、
ともにmagic quotes gpcの値を見て、関数を通すか判断しています。
間違えの例:$hoge = $myts->stripSlashesGPC($_POST['hoge']);
echo 'ポストデータ'.$myts->htmlSpecialChars($hoge);
$sql = "INSERT INTO table (text) VALUES ('".$myts->addSlashes($hoge)."')";
この例では、magic quotes gpcがoffであれば問題ありませんが、
magic quotes gpcがonの場合にはaddSlashesされませんので、SQL Injectionが可能になってしまいます。
正しい例:$hoge = $_POST['hoge'];
echo 'ポストデータ'.$myts->htmlSpecialChars($myts->stripSlashesGPC($hoge));
$sql = "INSERT INTO table (text) VALUES ('".$myts->addSlashes($hoge)."')";
受取ったデータは表示の時にstripSlashesGPCとhtmlSpecialCharsを掛けて、DBに保存するときにaddSlashesします。
気持ち的には受取ったときにstripSlashesGPCして生データにしておきたいですが、このやり方の場合は間違いです。
Free Web Hosting を利用する場合に、そのサーバー管理側の都合で、.htaccess を利用した、mbstring パラメーターのオーバーライドを許可していないサイトもあります。その場合、PHPのmbstringに関するパラメーターの設定がなされていないので、おうおうにして、文字化けを引き起こします。
mbstring関連のパラメーターを変更できないサイトにおけるXOOPS2の運用におきまして文字化けが起こる場合では、modules/myalbum/submit.php と modules/myalbum/editphoto.php について、前述しましたルールの通りにソースを変更させていただきましたが、対応以降、文字化けは起きておりません。
具体的には、例えば modules/myalbum/submit.php であれば、
// $title = $myts->stripSlashesGPC( $_POST["title"] ) ;
$title = trim( $_POST["title"] ) ;
// $desc_text = $myts->stripSlashesGPC( $_POST["desc_text"] ) ;
$desc_text = $_POST["desc_text"] ;
と、変数をそのまま代入し、
// $sql = "INSERT INTO $table_photos (lid, cid, title, ext, submitter, status, date, hits, rating, votes, comments) VALUES ($newid, $cid, '".addslashes($title)."', '$ext', $submitter, $status, $date, 0, 0, 0, 0)";
$sql = "INSERT INTO $table_photos (lid, cid, title, ext, submitter, status, date, hits, rating, votes, comments) VALUES ($newid, $cid, '".$myts->addSlashes($title)."', '$ext', $submitter, $status, $date, 0, 0, 0, 0)";
と変更しました。こうすれば、どんな環境でも文字化け問題は解決するのかも知れません。
- Ujiki.oO -