ホームページ  >  記事  >  php教程  >  register_globals について詳しく見る

register_globals について詳しく見る

黄舟
黄舟オリジナル
2016-12-13 17:43:422018ブラウズ

dedecmsではregister_globalsを強制的に制限しています

register_globals設定はPHP変数のアクセス範囲を制御するため、オンにすると不要なセキュリティ上の問題が発生するため、Webマスターのスペースがサポートしていない場合は、ここで強制的にオフにします。次の方法を使用できます。この方法はウェブマスター向けに変更されています:

*スタンドアロンサーバーユーザーの場合は、PHP 設定ファイルの php.ini を変更し、register_globals=On を register_globals=Off に変更します。そして、Apache を再起動します

* 仮想サーバーの場合、ホストのユーザーは構成を変更できるようにスペースプロバイダーに通知する必要があります。または、ini_set('register_globals',0) を試すこともできます。 Web サイトのディレクトリに新しい .htaccess ファイルを作成し、php_flag register_globals off を追加します。すでに .htaccess ファイルがある場合は、それを末尾の新しい行に追加するだけです。最後の手段は、include/common.inc.php に直接アクセスして次のコードを削除することです (提案なし)

// register_globals を開くと多くの危険な可能性があるため、 register_globalsif(ini_get('register_globals') を閉じることが必須です。 ){ exit('php.ini register_globals はオフでなければなりません! '); PHP4.2.0バージョンでは、php.iniのregister_globals設定オプションのデフォルト値がoffになります。したがって、今すぐ Off スタイルでプログラミングを始めるのが最善です。
register_globals の値は、On または Off に設定できます。それぞれの違いを説明するコードを示します。

コード:




register_globals=Off の場合次のプログラムが受信するときは、$_GET['user_name'] と $_GET['user_pass'] を使用して、渡された値を受け入れる必要があります。 (注:

のメソッド属性が post の場合、$_POST['user_name'] と $_POST['user_pass'] を使用する必要があります)

register_globals=On の場合、次のプログラムは $user_name と $_POST['user_pass'] を直接使用できます。 $user_pass を使用して値を受け入れます。

register_globals はその名の通り、グローバル変数として登録するという意味なので、On の場合は渡された値をそのままグローバル変数として登録して直接利用し、Off の場合は渡された値を取得する必要があります。特定の配列。したがって、値を取得できないという上記の問題に遭遇した友人は、まず register_globals 設定が値を取得する方法と一致しているかどうかを確認する必要があります。 (確認するには、phpinfo() 関数を使用するか、php.ini を直接確認できます) ここで何が問題なのか見てみましょう。

次の PHP スクリプトを見てください。これは、入力されたユーザー名とパスワードが正しい場合に Web ページへのアクセスを承認するために使用されます:


// ユーザー名とパスワードを確認します
if ($username == 'kevin ' and $password == 'secret')
$authorized = true;

php endif ?>

上記のコードの問題は、正しいユーザー名とパスワードを入力しなくても簡単にアクセスできることです。ブラウザのアドレスバーの最後に ?authorized=1 を追加するだけです。 PHP はフォームの送信、URL クエリ文字列、Cookie など、送信された値ごとに変数を自動的に作成するため、$authorized が 1 に設定され、権限のないユーザーがセキュリティ制限を超える可能性があります。

register_globals=off ウェブサイトが開けない問題の解決策

register_globals は php.ini の設定であり、php が渡されたパラメータを受け取る方法に影響します。その名前が示すように、register_globals はグローバル変数として登録することを意味します。そのため、On の場合は渡された値がグローバル変数として直接登録されて直接使用され、Off の場合は特定の配列で取得する必要があります。したがって、値を取得できないという上記の問題に遭遇した友人は、まず register_globals 設定が値を取得する方法と一致しているかどうかを確認する必要があります。 (確認するには、phpinfo() 関数を使用するか、php.ini を直接確認できます)

register_globals=off は主にセキュリティ上の理由からです。同時に、ほとんどのプログラムでは値を off に設定する必要があります。以前は On スタイルで書かれたスクリプトがたくさんありましたか? 以前のスクリプトが適切に計画されており、config.inc.php ファイルなどのパブリック インクルード ファイルがある場合は、次のコードをこのファイルに追加してシミュレートします (このコードは問題を 100% 解決するという保証はありません。十分なテストはしていませんが、うまく機能すると思います)。

コード:

if ( !ini_get("register_globals") )
{
extract($_GET);
extract($_FILES); ;
extract($_ENV);

if (isset($_SESSION) )
?>未定義の変数

$act=$_POST['act']; への解決策

上記のコードを使用すると、常にプロンプ​​トが表示されます
Notice: Unknown index: act in F:windsflybookpost.php on line 18

さらに、場合によっては表示されます

引用内容

通知: 未定義の変数: 送信...


などのプロンプト

原因: 未定義の変数が原因

解決策:
1) error_reporting 設定:
error_reporting = E_ALL を検索
error_reporting = E_ALL & に変更~E_NOTICE

2) register_globals 設定:
register_globals = Off を見つけます
register_globals = On に変更します

通知: 未定義の変数: D:PHP5ENOTEADDNOTE.PHP の 9 行目の電子メール
通知: 未定義の変数: D:PHP5ENOTEADDNOTE.PHP の件名on line 9
Notice: Unknown variable: comment in D:PHP5ENOTEADDNOTE.PHP on line 9
....
本来、PHP では変数を定義する必要はないのですが、このような状況が発生します
php を見つけるだけでいいですか? C: WINDOWS の .ini
php.ini の 302 行目 error_reporting = E_ALL
それを
error_reporting = E_ALL & ~E_NOTICE に変更し、apache2.2 を再起動します
解決策: php.ini を変更します
変更: error_reporting = E_ALL
を次のようにします: error_reporting = E_ALL & ~E_NOTICE
エラーを表示したくない場合は、直接変更します:
display_errors = Off
php.ini を変更する権限がない場合は、php.ini で変更できます
ini_set("error_reporting", "E_ALL & ~E_NOTICE");
先頭へ

さらに関連するコンテンツを取得したい場合は、PHP 中国語 Web サイト (www.php.cn) に注意してください。 )!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。