PHPセキュリティ(register_globals)

スポンサーリンク

■ 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にはしないようにしよう。

コメント

タイトルとURLをコピーしました