電子書籍の厳選無料作品が豊富!

今現在、register_globalsがデフォルトでOFFだ
というのは知っていますが、
実際にONを前提に書いている人、私も含めて多いと思いますが、
どうやって代替させるのかを
具体的に書いているサイトを知っていましたら、
教えて下さい。

色々なサイトを見ても、問題点は書いているけど、
代替方法があまり書いていないので、
どうすればいいのかよく分からず、
OFFに切り替えたいけど、
出来ない状態でいます
($_POST["***"]等を使うのは見ますが)。

hiddenを使うのは推奨されないということでしょうか?
値の引き渡しをしないで、
どうやって処理させるのか、
リンクで直接パラメーターを書くのも推奨されないと
いうことでしょうか?
例: http://www.***.jp/index.php?***=**&***=1

是非ともご回答をお待ちしています。

A 回答 (3件)

register_globalがONの場合、ファイルをWebサーバにアップロードする許可をとりつけた攻撃者によってPHP"GLOBALS"配列を上書きされてしまったりするので、任意のPHPコードが使われてるようなセキュリティホールも指摘されています。

セキュリティの関係上、デフォルトOFFです。

ONを前提に書いたプログラムの変更には、extract関数が有効です。
extract($_POST);
とか、
extract($_GET);
とすれば、$_POST[aaa] は $aaa へ展開され、そのまま変数に入ります。

extractではなく、理想的には、$aaa => $_POST[aaa] というような置換をする方がいいと思います。また、この事で、PHPでは変数に宣言がいらないので、外部からのパラメータなのか、内部変数なのかも判りやすくなるので、後々メンテナンスが楽なります。

> hiddenを使うのは推奨されないということでしょうか?
ここではあまり関係ありませんね。使ってもかまわないと思います。ただ、クラッカーに判りやすいようなデータ構造になっているとセキュリティ上問題です(hiddenの変数を改変すれば別ユーザのデータにアクセス出来てしまったり。。。)。
> リンクで直接パラメーターを書くのも推奨されないということでしょうか?
これもそんな事はありません。
    • good
    • 0

がると申します。


んっと…とりあえず。もしお仕事でなさっているなら何はともあれ。個人であっても可能なかぎり「ONを前提に書いている」のはお避けになるのが賢明かと思われます。

情報の取得には、PHPでいうところの「スーパーグローバル変数」を用います。
$_GETまたは$_POSTですね。
URLパラメタならGETのほうで取得が可能です。

ただ、情報の引継ぎは、hiddenではなく、セッション変数を用いられたほうがよろしいと思います。
セッション変数については…個人なら「使わない」のも手です。お仕事でなさっているのであれば、きちんと相応の書籍などをあたり、学ばれることをお勧めいたします。
    • good
    • 0

渡したい引数を羅列してください。



$hoge=$_REQUEST["hoge"];

どうしてもめんどうならスクリプトの頭に
こんなのを書けば、パラメータを全て設定することになりますが
register_globalsがoffになっている理由を考えればやるべきでは
ありません。

foreach ($_REQUEST as $key => $val){
$$key=$val;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!