ホームページ  >  記事  >  バックエンド開発  >  register_globals を深く理解する (register_globals=off で Web サイトが開けない問題を解決)_PHP チュートリアル

register_globals を深く理解する (register_globals=off で Web サイトが開けない問題を解決)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:18:231709ブラウズ

register_globals を深く理解する

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

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

*スタンドアロンサーバーユーザーの場合は、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 に設定できます。それぞれの違いを説明するコードを示します。

コード:




コードをコピーします

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

< /form>



register_globals=Off の場合、次のプログラムは、受信時に渡された値を受け入れるために $_GET['user_name'] を使用する必要があります。 (注: のメソッド属性が 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
?>
;

ユーザー名とパスワードを入力してください:



ユーザー名:

パスワード:


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

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

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

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


コード:

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

if ( !ini_get("register_globals") )
{
extract($_POST); _GET);
抽出($_FILES);
抽出($_COOKIE);
{
抽出($_SESSION);
}
}
?>




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

$act=$_POST['act'];
上記のコードを使用すると、常にプロンプ​​トが表示されます
注意: 未定義のインデックス: F :windsflybookpost.php (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
Notice: Unknown variable: subject in D:PHP5ENOTEADDNOTE.PHP on line 9
Notice: Unknown variable: comment in D:PHP5ENOTEADDNOTE.PHP on line 9
....
本来、phpは変数を定義する必要はありませんが、しかし、これが起こった場合はどうすればよいでしょうか?
C:WINDOWS の php.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_set("error_reporting", "E_ALL & ~E_NOTICE"); を追加できます。



http://www.bkjia.com/PHPjc/325524.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/325524.html

register_globals を深く理解する dedecms は register_globals に制限を適用します。 register_globals 設定は PHP 変数のアクセス範囲を制御するため、オンにすると不要なセキュリティの問題が発生するため、これは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。