- ベストアンサー
チェックボックス等の扱い。
http://oguchan.s4.xrea.com/language/php/ のサイトにて、 <FORM> <INPUT TYPE="TEXT" NAME="hoge" VALUE="1"> <INPUT TYPE="SUBMIT"> </FORM> は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 register_globals を無効にしてこれをできなくする。とあります。 PHP4~もそういうように設定されていると聞きました。 しかし、チェックボックスで同じname、で異なるvalueをもつ複数のデータを扱うときに、 <input type="checkbox" name="delno[]" value="no1"> <input type="checkbox" name="delno[]" value="no2"> としたときに、 echo $_POST['delno'][0]; echo $_POST['delno'][1]; と参照できてしまうのですが、これはいいのですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
セキュリティ上でも、危険だと思うよ。 test.php?hoge=123 としてアクセスすれば、$hogeの初期値が123になってしまう。 スクリプト内の変数名がわかれば、ユーザーが変数の初期値を 設定できてしまう。 ローカル変数だったら、コード内で初期化するから、 さほど影響ないかもしれない。 グローバル変数だったら、いろいろと問題だと思うよ。 ↓の参考urlのように、認証でそんなコード書かないと思うけど、 ユーザーが変数の値を操作できるってのは、危険かと。
その他の回答 (2)
- little-m
- ベストアンサー率44% (45/102)
>は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 >register_globals >を無効にしてこれをできなくする。とあります。 この場合の危険とは、セキュリティ上危険という意味でなく、phpのプログラム内で、意識せず$hogeという変数を使用した場合に、混同する危険があって、バグなどの発生する危険が増える、という意味の危険だと思いますよ。
- anmochi
- ベストアンサー率65% (1332/2045)
いいのですよ。 register_globalsの有無というのは、NAME="hoge"が$hogeとしてアクセスできるかできないか、という意味だ。 register_globals=ON:NAME="hoge"→$hogeでアクセスできる。$_POST['hoge']でもアクセスできる。 register_globals=OFF:NAME="hoge"→$_POST['hoge']でアクセスできる。 なので$_POST連想配列はregister_globalsの値にかかわりなくいつでも使えるので安心してくれたまい。 $delno[0]、$delno[1]でアクセスできないよ、という意味だ。$_POST連想配列を介した時は参照できるね。