• ベストアンサー

チェックボックス等の扱い。

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]; と参照できてしまうのですが、これはいいのですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

セキュリティ上でも、危険だと思うよ。 test.php?hoge=123 としてアクセスすれば、$hogeの初期値が123になってしまう。 スクリプト内の変数名がわかれば、ユーザーが変数の初期値を 設定できてしまう。 ローカル変数だったら、コード内で初期化するから、 さほど影響ないかもしれない。 グローバル変数だったら、いろいろと問題だと思うよ。 ↓の参考urlのように、認証でそんなコード書かないと思うけど、 ユーザーが変数の値を操作できるってのは、危険かと。

参考URL:
http://php.s3.to/man/security.registerglobals.html

その他の回答 (2)

  • little-m
  • ベストアンサー率44% (45/102)
回答No.2

>は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 >register_globals >を無効にしてこれをできなくする。とあります。  この場合の危険とは、セキュリティ上危険という意味でなく、phpのプログラム内で、意識せず$hogeという変数を使用した場合に、混同する危険があって、バグなどの発生する危険が増える、という意味の危険だと思いますよ。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

いいのですよ。 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連想配列を介した時は参照できるね。

関連するQ&A