suin.io

「WeeklyCMS 6/24 マイクロソフト本社特番03」の補足など

suin2011年7月2日

「WeeklyCMS 6/24 マイクロソフト本社特番03」はセキュリティ回で、ちょっと補足したほうがいいかなーと思ったんで、ブログエントリにしちゃいます。XOOPSモジュール開発しようって人に参考になればなぁと。

WeeklyCMS 6/24 マイクロソフト本社特番03

Check Secure Code (04:47〜)

$_POST/GETをforeach展開

foreach ( $_POST as $key => $value )
{
	$$key = $value;
}

「見かけたら即デリート」ということで、危険性と置き換え方がはしょられてる。時間の都合かなーと思いつつ…。

こういうコードの危険性としては、$_SERVERなどの変数を容易に乗っ取られてしまう点。置き換え方は、必要な変数だけ定義するようにすること。たとえば、下の例のように。

// title, text, posterだけがあればいいとき
$title  = $_POST['title'];
$text   = $_POST['text'];
$poster = $_POST['poster'];

intvalはエースケープ関数じゃない^^;

bluemoonさんによると、下の例がまずいらしい。

$hoge = isset($_GET['hoge']) ? $_GET['hoge'] : 0 ;

そして、整数を受け取る前提のものは、次のように書き換えるべきだとしてる

$hoge = isset($_GET['hoge']) ? intval($_GET['hoge']) : 0 ;

最初に整数にしといたほうが安全になるのは確か。HTMLに出すとき、SQLのクエリに入れるときのどちらにも対応できるから。でも、ユーザの入力を勝手に書き換えるのはあまりベストじゃない。だから、この場合は$_GETから取るときはintvalしないでおいて、HTMLに出すときにhtmlspecialchars($hoge, ENT_QUOTES, 'UTF-8')、SQLのクエリにするときにmysql_real_escape_string($hoge)しておくのがいいと思う。

htmlspecialchars()はHTMLに出す直前に

「文字列だったら、htmlspecialcharsで」とのこと。そしてそのサンプルがこれ。

$hoge = isset($_GET['hoge']) ? htmlspecialchars($_GET['hoge'], ENT_QUOTES) : "" ;

そのとおりなんだけど、$_GETから取った直後にhtmlspecialchars()をかけることはXOOPSのモジュールではほとんどない。Smartyに変数を渡す直前でやるのが通常かなと。なぜなら、リクエストをもとに何かデータをこねくり回す(DBを参照したり)ことが多いから。そのとき、HTMLエンコードされた文字列だといろいろ不便だから。なので、やっぱりこれもintval同様に$_GETから値をとった段階では生にしとく。

$hoge = isset($_GET['hoge']) ? $_GET['hoge'] : "" ;

// $hogeをもとにデータをこねくり回す処理

$hoge = htmlspecialchars($hoge, ENT_QUOTES, 'UTF-8');

$xoopsTpl->assign('hoge', $hoge); // smartyに$hogeを渡す

SQL Injection (6:01〜)

addslashes()じゃなくてmysql_real_escape_string()を使おう

録画の中でSQLインジェクションの対策として、addslashes()関数をつかうことを勧めてる。addslashes()でも、SQLのエスケープをうまくやってくれる。実際に、XOOPSのコードのいたるところにaddslashes()がある。でも、addslashes()はクエリエスケープ用の関数じゃないので、SQLインジェクション対策に使うのはちょっと意味が違う。やっぱり、ここはMySQL専用エスケープ関数のmysql_real_escape_string()を使おう。

Mac大好きなmikageさんが会場がMicrosoftなのに「PCじゃなくてMacです、PCというとWindowsです」と言っちゃってるとこを見て、ポカリふきそうになったw そのあと、Microsoftの武田さんが発表の前振りで「すいません、PCでっ」ってww6/24ほんとに行きたかったし、行けなくてもリアルタイムで放送見たかったよーT_T

RELATED POSTS