日記
Zend Frameworkにはもうちょっと気を遣って欲しかったEdit

なんかZend Frameworkの構成コードやサンプルなんかも、全然セキュリティには気を遣ってないっぽいなー。まだプレビューリリースってことを差し引いたとしても、根本的にセキュリティっつーか状況に応じたエスケープという概念を省略しまくりなのが、ちょっときつい。

どうせなら標準関数として、

function htmlprintf()
{
$args = func_get_args();
$format = array_shift($args);
foreach ($args as $index => $value) {
$args[$index] = htmlspecialchars($value);
}
array_unshift($args, $format);
return call_user_func_array('sprintf', $args);
}
function sqlprintf()
{
$args = func_get_args();
$format = array_shift($args);
foreach ($args as $index => $value) {
$args[$index] = addslashes($value);
}
array_unshift($args, $format);
return call_user_func_array('sprintf', $args);
}
$html = '<span>%s</span><span>%d</span>';
echo htmlprintf($html, '<>"&', '345.3') . "\n";
echo htmlprintf($html, '234', 'adsfdas') . "\n";
$sql = 'select * from test where string = \'%s\' and number = %d';
echo sqlprintf($sql, '\'foo', '345.3') . "\n";
echo sqlprintf($sql, '234', 'adsfdas') . "\n";
C:\php>cli\php test.php
<span>&lt;&gt;&quot;&amp;</span><span>345</span>
<span>234</span><span>0</span>
select * from test where string = '\'foo' and number = 345
select * from test where string = '234' and number = 0

みたいな関数を用意しておけば、ずいぶんましになるのかなー。sqlprintfの方はもっとちゃんと作る必要がある(DB関連関数の呼び出しをフックして、最後に呼び出したDB関数用のエスケープを実行するようにする、とか)けど、これでもないよりはずいぶんましって気がする。

Published At2006-03-08 00:00Updated At2006-03-08 00:00