■ register_globalsの設定(php.ini)
GETやPOSTで送信された変数をグローバル変数として使用出来る。
* Default
register_globals = Off (PHP4.2.0から初期値がOff)
* Example
ログイン認証スクリプト – login.php(色々脆弱性ありますが、気にしない形で)
<?php
//ユーザ名とパスワードの定義
$usertable = array(
'guest' => 'guestpass',
'admin' => 'adminpass'
);
//入力値チェック
if (!$username || !$password) {
echo "ユーザ名またはパスワードが未入力です。";
exit();
}
//パスワードチェック
if ($usertable[$username] == $password) {
$check_login = true;
}
//表示
if ($check_login) {
echo "ログイン成功";
} else {
echo "ログイン失敗";
}
* Description
通常使用では、フォームからPOSTまたはGETを貰い、register_globalsの機能で変数として扱えることになる。つまり、$_GET[‘username’]は$usernameで呼び出すことが出来る。
しかし、URL上でlogin.php?username=aaa&password=bbb&check_login=trueこのような指定をしたとき、ログインに成功してしまう。
また、GET,POSTをそのまま変数とするため、スクリプト内で指定している変数と競合する可能性もある。
* Answer
register_globalsをOffにする。元々Offになっているので、Onにはしないようにしよう。
コメント