• ベストアンサー

セキュリティーを意識した書き方。

前にPerlでmyの"有効"な使い方が分からないと 書いたものです。^^; 使い方は分かるんですが、my宣言するよりも、 変数の名前を変えた方がわかりやすい、、ような? その時は、最終的に「Perlは柔軟な書き方ができる」と回答して頂いたのですが、今回PHPを勉強にするに あたって、せっかくなのできっちりとした、コードの 書き方を知りたく、質問しています。 HPや細かな事でも、自分で調べる事もできますので、 注意点等を教えて頂ければ幸いです。 やっぱり、globalは宣言した方がいいのでしょうか?^^;

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

  • ベストアンサー
  • lunar16th
  • ベストアンサー率66% (10/15)
回答No.1

プログラム全般に言える事なのですが、一般にはより小さな影響範囲で管理できるならば内部変数化して設計していくのが良いです。 このセキュリティの問題というよりは、メモリ管理や動作速度等との兼ね合いになってくるかと思います。 PHP勉強されるならば、PEARというライブラリがあるのをご存知ですか? 参考までに、そこでのコーディング規約を眺めて見ると良いと思います。 http://www.1x1.jp/php/manual_pear/standards.html global変数自体、使ってはいけないものではなく、管理ができるならわかりやすい名前を付けて使用されれば何も問題がないと思いますよ。 尚、表題のセキュリティを意識した書き方とあり、しっかりしたコーディングをされたいのであれば、「SQLインジェクション」・「クロスサイトスクリプティング」、この辺りでも調べて参考にプログラムをされると良いと思います。

happy_books
質問者

お礼

PEARは知りませんでした。 初心者入門書や、分からなかった事をネットで調べる だけでは、分からない事だと、思います。 2つの単語も知りませんでした。 my関数も、一番メモリーが気になってたんですが、 そうでもないよ。って意見があったので、いいかな?と。

happy_books
質問者

補足

新たに質問しようかとも、思いましたが、関連が あると思うので、補足させてください。 $_POST['name'] で Undefined index: name とでます。 初期値が設定されていないと、言われるのは、わかります。 設定で出なくする方法は、分かりましたし、HPを設置して いるサーバでは確認しましたが、この警告は出ませんでした。 でも、せっかくなので、初期値が入っていないものは、 使わない方向でいこうとおもうのですが、同一ファイル 内でうまい、回避方法はないでしょうか? $_POST等を使っても、うまくいかなくって。

その他の回答 (2)

  • lunar16th
  • ベストアンサー率66% (10/15)
回答No.3

補足です。 ちょっと、グローバルに関してメモリーがどうのと、書き込みをしてしまいましたので軽く解釈をしておきますと、厳密には速度やメモリーに関わると言ってもマシンのハイスペック化が進み気になるほどでは無いと思われます。 多少無理やりな例えですが、ペンが見つからない時に「筆箱」を探すか「部屋の中」を探すか、整理整頓されていれば、読みやすいのでお奨めです。 また、更に少し補足ですがBLUEPIXYさんのとおり、 isset($_POST['name'])のような書式でundefined~は回避できます。 $_POSTから取得するときは必ず $v_name=(isset($_POST['name'])?$_POST['name']:''); のような書き方で使用されていないものは空白にしたりゼロにしたりといった対応が使い勝手良いですよ。

happy_books
質問者

お礼

私のマザーボードでも、3Gメモリーが詰めますし、 私の作る、CGIは実行するCGI本体とデーターを 含めても、10KBいきませんし。軽視ではないですが。 undefined~は他の変数に関しては空白を挿入してます。 formで送信するデータだけはうまくいかなくて。 でも、カンパウェアと名の付くPHPでも、ずらずらと この注意がでるので、さほど気にしなくてもいいのかな? と思うようになりました。 BLUEPIXYさん、lunar16thさん、ありがとうございま した。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>初期値が入っていないものは、… 変数がセットされているかどうかは isset($_POST['name']) のようにして調べられます。

happy_books
質問者

お礼

ちょっと題と、聞きたい事が少しずれていました。 それでも、答えて頂きありがとうございます。^^

関連するQ&A