ホームページ >php教程 >php手册 >register_globals の詳細 (register_globals=off を使用すると、Web サイトを開けない問題が解決されます)

register_globals の詳細 (register_globals=off を使用すると、Web サイトを開けない問題が解決されます)

WBOY
WBOYオリジナル
2016-06-13 12:00:241123ブラウズ

register_globals を深く理解する

dedecms ではregister_globals が強制的に制限されています

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

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

* 仮想ホスト ユーザーの場合は、設定を変更できるようにスペース プロバイダーに通知してください。または、ini_set('register_globals',0) を試すこともできます。

* Web サイトのディレクトリに新しい .htaccess ファイルを作成し、php_flag register_globals を追加します。既に .htaccess ファイルがある場合は、それを追加します。

* これが機能しない場合、唯一の最後の手段は、include/common.inc.php に直接アクセスして、次のコードを削除することです (推奨されません)。 🎜>// register_globals を有効にすると多くの危険な可能性があるため、 register_globals を強制的にオフにしてください if(ini_get('register_globals')){ exit('php.ini register_globals must be Off! '); } PHP4.2.0 バージョン以降、php.ini の register_globals 設定オプションのデフォルト値が off になります。したがって、今すぐ Off スタイルでプログラミングを始めるのが最善です。
register_globals の値は次のように設定できます: On または Off それぞれの違いを説明するコードを示します。

コード:



コードをコピー コードは次のとおりです:

<フォーム名="frmTest " id="frmTest" action="URL">







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

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


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

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

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



コードをコピー

コードは次のとおりです: // ユーザー名とパスワードを確認します

if ($username == 'kevin' and $password == 'secret' )
$authorized = true;
?>




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

register_globals=off Web サイトを開けない問題の解決策

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($_POST);
extract($_SERVER); _FILES);
抽出($_COOKIE);

if (isset($_SESSION) )
{
抽出($_SESSION); >}
}
?>




PHP 未定義のインデックスと未定義の変数の解決策



$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 に変更

Notice: Unknown variable: email in D:PHP5ENOTEADDNOTE.PHP on line 9
Notice: Unknown variable: subject in D:PHP5ENOTEADDNOTE.PHP on line 9
: comment in D:PHP5ENOTEADDNOTE.PHP on 9 行目
....
本来、php では変数を定義する必要はありませんが、このような場合はどうすればよいでしょうか。
C :WINDOWS 内であれば、
を調べてください。 php.ini の 302 行目 error_reporting = E_ALL

に変更し、apache2.2 を再起動します。 > 変更: error_reporting = E_ALL
を次のように変更します: error_reporting = E_ALL & ~E_NOTICE
エラーを表示したくない場合は、次のように直接変更します:
display_errors = Off
php .ini の変更権限は、php ヘッダー
ini_set("error_reporting", "E_ALL & ~E_NOTICE")
に追加できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。