com doc/ja: Remove some mentions of register globals: language/variables.xml reference/array/functions/extract.xml reference/network/functions/setcookie.xml reference/session/examples.xml reference/strings/functions/parse-str.xml
[email protected] (Yoshinari Takaoka) Sat, 16 Jan 2021 11:55:03 +0000
| Newsgroups | php.doc.ja |
|---|---|
| Message-ID | <[email protected]> |
Commit: cff053cfac4bb88ad3c3bf6c0a543f7ee6155f9c Author: Yoshinari Takaoka <[email protected]> Sat, 16 Jan 2021 20:55:03 +0900 Parents: a5df62fd384cb9975ad7af90b7216c25ffeab75b Branches: master Link: http://git.php.net/?p=doc/ja.git;a=commitdiff;h=cff053cfac4bb88ad3c3bf6c0a543f7ee6155f9c Log: Remove some mentions of register globals Changed paths: M language/variables.xml M reference/array/functions/extract.xml M reference/network/functions/setcookie.xml M reference/session/examples.xml M reference/strings/functions/parse-str.xml
diff_cff053cfac4bb88ad3c3bf6c0a543f7ee6155f9c.txt
(text/plain, 9.9 KB)
diff --git a/language/variables.xml b/language/variables.xml
index 21e3ca1e13..b43c2202ec 100644
--- a/language/variables.xml
+++ b/language/variables.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 9eacb8a641f1c6d5b54d89c2d04e6ab87d2a98c1 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,mumumu -->
<chapter xml:id="language.variables" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>変数</title>
@@ -166,10 +166,8 @@ var_dump($unset_obj);
</para>
<para>
初期化されていない変数のデフォルト値に依存すると、そのファイルを
- include している別のファイルで同名の変数が使用されていた場合などに
- 問題を起こします。また、<link linkend="ini.register-globals">register_globals</link>
- が on の場合には重大な<link linkend="security.globals">セキュリティリスク</link>
- を抱えることになります。初期化されていない変数を使用すると、
+ include している別のファイルで同名の変数が使用されていた場合などに問題を起こします。
+ 初期化されていない変数を使用すると、
<link linkend="errorfunc.constants.errorlevels.e-notice">E_NOTICE</link> レベルのエラーが発生します。
しかし、初期化されていない配列に要素を追加する場合はエラーにはなりません。
変数が初期化されているかどうかの判断には、<function>isset</function>
diff --git a/reference/array/functions/extract.xml b/reference/array/functions/extract.xml
index 58bad79f4e..cd40450a21 100644
--- a/reference/array/functions/extract.xml
+++ b/reference/array/functions/extract.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: cd943f94a013b74df8765ab8e1a620a916a64a85 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka -->
<refentry xml:id="function.extract" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
@@ -220,100 +220,14 @@ blue, large, sphere, medium
<function>extract</function> をユーザー入力
(<varname>$_GET</varname> や <varname>$_FILES</varname> など)
のような信頼できないデータについて使用しないでください。
- もし行う場合、例えば
- <link linkend="security.globals">register_globals</link>
- を信頼しているような古いコードを一時的に実行したい場合、
- <constant>EXTR_SKIP</constant> のような
- <parameter>flags</parameter>
+ もし行う場合、
+ <constant>EXTR_SKIP</constant> のような <parameter>flags</parameter>
の値が上書きされていないことを確認してください。そして
<link linkend="ini">&php.ini;</link> の
<link linkend="ini.variables-order">variables_order</link>
で定義されたものと同じ順で展開すべきであることに留意してください。
</para>
</warning>
- <note>
- <para>
- <link linkend="security.globals">register_globals</link> が on の状態で
- <varname>$_FILES</varname> に対して
- <function>extract</function> を実行して
- <constant>EXTR_SKIP</constant> を指定すると、
- その結果に驚くことでしょう。
- </para>
- <warning>
- <para>
- これは決しておすすめする方法ではなく、
- 単にドキュメントとしての完全性を求めてここに書いているだけです。
- <link linkend="security.globals">register_globals</link>
- を使ったり、<varname>$_FILES</varname> のような信頼できないデータに対して
- <function>extract</function> を使ったりすることは非推奨となっています。
- 先に説明したようにセキュリティ上のリスクがあるからです。
- もしこの問題に遭遇したならば、
- まずいコーディング作法を少なくともふたつ使っているということになります。
- </para>
- </warning>
- <programlisting role="php">
-<![CDATA[
-<?php
-
-/* $testfile にはアップロードされたファイルの名前が入っており、
- register_globals が on であるものとします */
-
-var_dump($testfile);
-extract($_FILES, EXTR_SKIP);
-var_dump($testfile);
-var_dump($testfile['tmp_name']);
-
-?>
-]]>
- </programlisting>
- <simpara>
- おそらくこんな結果になることを期待しているでしょう。
- </simpara>
- <screen>
-<![CDATA[
-string(14) "/tmp/phpgCCPX8"
-array(5) {
- ["name"]=>
- string(10) "somefile.txt"
- ["type"]=>
- string(24) "application/octet-stream"
- ["tmp_name"]=>
- string(14) "/tmp/phpgCCPX8"
- ["error"]=>
- int(0)
- ["size"]=>
- int(4208)
-}
-string(14) "/tmp/phpgCCPX8"
-]]>
- </screen>
- <simpara>
- しかし、実際にはこのようになります。
- </simpara>
- <screen>
-<![CDATA[
-string(14) "/tmp/phpgCCPX8"
-string(14) "/tmp/phpgCCPX8"
-string(1) "/"
-]]>
- </screen>
- <para>
- これは、<link linkend="security.globals">register_globals</link>
- が on の場合は <function>extract</function>
- がコールされた時点で既にグローバルスコープに
- <varname>$testfile</varname> が存在するからです。
- そして <constant>EXTR_SKIP</constant> が指定されているので、
- <varname>$testfile</varname> が
- <constant>$_FILES</constant> 配列の内容で上書きされることはありません。
- <varname>$testfile</varname> はそのまま文字列として残るわけです。
- <link linkend="language.types.string.substr">
- 文字列は配列構文を使ってもアクセスでき</link>、
- 非数値の文字列 <literal>tmp_name</literal> は
- <literal>0</literal> と解釈されるので、PHP は
- <varname>$testfile['tmp_name']</varname> を
- <varname>$testfile[0]</varname> とみなします。
- </para>
- </note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
diff --git a/reference/network/functions/setcookie.xml b/reference/network/functions/setcookie.xml
index 6cc5da212c..87c580637a 100644
--- a/reference/network/functions/setcookie.xml
+++ b/reference/network/functions/setcookie.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 728b7a9bc0f96ddcdd9ed0f2c7e508787ed5523d Maintainer: takagi Status: ready -->
+<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.setcookie" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
@@ -329,15 +329,6 @@ one : cookieone
を使用します。
</para>
</note>
- <note>
- <para>
- PHPの <link linkend="ini.register-globals">register_globals</link>
- ディレクティブが <literal>on</literal> になっている場合、
- クッキーは変数にも登録されています。
- 以下の例では、<varname>$TestCookie</varname> 変数が存在します。
- <varname>$_COOKIE</varname> の使用することを推奨します。
- </para>
- </note>
<para>
陥りやすい失敗
<itemizedlist>
diff --git a/reference/session/examples.xml b/reference/session/examples.xml
index a06a2bc042..dd683dac6b 100644
--- a/reference/session/examples.xml
+++ b/reference/session/examples.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 95bdd6883b5dde9504701777ba81b3c5f15df52b Maintainer: takagi Status: ready -->
+<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: takagi Status: ready -->
<!-- CREDITS: shimooka,hirokawa -->
<appendix xml:id="session.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
@@ -89,13 +89,6 @@ unset($_SESSION['count']);
他の変数への参照を復元する方法がないからです。
</para>
</warning>
- <warning>
- <para>
- register_globals は、セッション変数と同じ名前のグローバル変数がある場合に
- グローバル変数をセッション変数で上書きします。
- 詳細は <link linkend="security.globals">グローバル変数の登録機能の使用法</link> を参照ください。
- </para>
- </warning>
<note>
<para>
ファイルベースのセッション (PHP のデフォルト) は、
diff --git a/reference/strings/functions/parse-str.xml b/reference/strings/functions/parse-str.xml
index c9425d7fbe..e446a04b56 100644
--- a/reference/strings/functions/parse-str.xml
+++ b/reference/strings/functions/parse-str.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: e095023e408c8cb6378ae16bb6870343a3946919 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka,mumumu -->
<refentry xml:id="function.parse-str" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
@@ -48,16 +48,6 @@
絶対に <emphasis>おすすめしません</emphasis> し、
PHP 7.2 以降では <emphasis>推奨されません</emphasis>
</para>
- <para>
- 関数スコープの変数に動的に値を設定すると、
- <link linkend="ini.register-globals">register_globals</link>
- と全く同じ問題で苦しむことになります。
- </para>
- <para>
- なぜこのことが危険なのかを説明するために、
- <link linkend="security.globals">グローバル変数の登録機能の使用法</link>
- を読んでください。
- </para>
</warning>
</listitem>
</varlistentry>