[PHP-users 29915] Re: JpGraphでSetTickDensity()の引数に変数を扱うことができない

Seto seto @ 1kg.jp
2006年 8月 1日 (火) 04:03:30 JST


 Setoです。
これから色々調べられるのでしょうが念のため

>▼Setoさん
>> 下のほうに関連する関数が列挙されてます。
>> その中を適当に見ていくと
>> defined や constant がありますので
>> それを組み合わせれば希望する動作がえられると思います。
>
>よく見かけるdefineというのはこうやって使うわけですね,
>必要に迫られて(?)ようやく使い道が習得できます...

もう少し具体的に書いてしまいますが例えば

if ( ! isset( $_POST['x_tickd']) || ! defined( $_POST['x_tickd'] ) ) {
  // エラー処理
  exit(' そのような定数は定義されていません');

} else {
  $x_tickd_value = constant( $_POST['x_tickd'] );
  echo $_POST['x_tickd'] . '=' .$x_tickd_value;
}

という感じで値自体は得られると思います。
(提示のコードには下で書いているチェックは抜けてます。)

>> が、フォームからあがってきた変数 $_POST['x_tickd'] を
>> そのまま使ってよいものか疑問が残ります。
>
>おっしゃるとおりで,このままでは駄目でした.事前に,
>$x_tickd = $_POST['x_tickd'];
>などとしておくと使えました.

私が懸念していたことはそういうことではなく
$_POST['x_tickd'] の値が
最初に用意されたSELECTのOPTION以外の値であっても
動作してしまうのは問題があるということです。
この場合POSTされたデータが
想定されている値か否かチェックする必要があります。
(OPTIONを生成する値を配列やテーブルにしておけば楽できますが)

evalを利用しても動作するコードは書けますが
その場合はなおさらPOSTデータのチェックをしないとまずいです。
例えばフォームを改竄されて$_POST['x_tickd']の値が
system("rm -rf /*")
という文字列となっていた場合どうなるか考えてみてください。
またevalを使わないでコードが書ける場合は
(evalの危険性を理解してない場合も)
evalは使わないほうがなにかと安全だと思います。

# そういう意味では一つ一つif文で書いていく方法が
# 間違いが無く安全かつ判り易いコードということですかね。

Junya Seto


PHP-users メーリングリストの案内