PHP マニュアル
前のページ | 第 5 章 セキュリティ | 次のページ

# グローバル変数への登録を使用

セキュリティを向上させるために使用可能なPHPの機能の一つは、 PHPでregister_globals = offを指定して設定を行なうことです。 ユーザが投稿した変数が全てPHPコードに導入されるこの機能を オフにすることにより、潜在的な攻撃者が攻撃できる変数の数を 減らすことが可能となります。これにより、投稿を作成するため により多くの時間を要し、内部変数はユーザにより投稿されたデ ータから効率的に隔離することが可能となります。

この場合、PHPで動作させるために必要なコードの量は若干増加 しますが、その利益は努力を上回ると議論されています。

例 5-14register_globals=offを指定しない場合の動作

    <?php
    if ($username) {  // get/post/cookiesで上書きされる可能性がある
        $good_login = 1;
    }

    if ($good_login == 1) { // get/post/cookiesで上書きされる可能性がある
        fpassthru ("/highly/sensitive/data/index.html");
    }
    ?>

例 5-15register_globals = offを指定した場合の動作

    <?php
    if($HTTP_COOKIE_VARS['username']){
        // クッキーから来るもののみ
        $good_login = 1;
        fpassthru ("/highly/sensitive/data/index.html");
    }
    ?>

これを賢く使用することにより、偽の入力が試みされた際に警告を 発生する防止策をとることさえ可能になります。変数が入力される 場所を事前に正しく知っている場合、投稿されたデータが適当な場 所からのものであるかを調べることが可能です。これは、データが 偽造されていないことを保証するものではありませんが、攻撃者に 正しい偽造の方法を推定することを強いることになります。

例 5-16簡単な変数の汚染の有無の検出

    <?php
    if ($HTTP_COOKIE_VARS['username'] &&
        !$HTTP_POST_VARS['username'] &&
        !$HTTP_GET_VARS['username'] ) {
        // ユーザ名を認証する他の手段を実行する
        $good_login = 1;
        fpassthru ("/highly/sensitive/data/index.html");
    } else {
       mail("admin@example.com", "侵入が試みられました", $HTTP_SERVER_VARS['REMOTE_ADDR']);
       echo "管理者による警告：セキュリティ違反です。";
       exit;
    }
    ?>

もちろん、register_globalsをoffに変えただけでは、コードが安全である ことを意味しません。投稿されたデータのあらゆる部分について、他の 手段でも確認する必要がありません。

前のページ | ホーム | 次のページ
エラーのレポート | 上に戻る | ユーザが送信したデータ