Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

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

セキュリティを向上させるために使用可能な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に変えただけでは、コードが安全である ことを意味しません。投稿されたデータのあらゆる部分について、他の 手段でも確認する必要がありません。