[PHP-users 30087] Re: プログラムの作りこみ
Yasuo Ohgaki
yohgaki @ ohgaki.net
2006年 8月 19日 (土) 04:15:55 JST
大垣です。
nebula @ e-net.or.jp wrote:
> 原因は未定義の変数を使用したということで理解はしたのですが、
> 通常、プログラミングを行う際、 Notice メッセージさえ出ないレベルまで
> 作りこむほうがいいのでしょうか?
はい。ベストプラクティスとしてそうするべきです。読みづらい、デバック
しづらいコードになります。
> 下記のように変更すると Notice が出なくはなりましたが、コードが増えただ
> けであんまり意味が無いような気がします。
先の理由以外にも、セキュリティ上の理由からもユーザ入力は、ごく一部
の例外を除いて、全て完全にチェックするべきです。完全にチェックする
とは以下を意味します。
- 期待している入力形式であること(正しい文字エンコーディングであるかの検証と含む)
- 数値型の場合は期待している範囲内であること
- 期待していない入力値が無いこと(国別ドメインのクッキーを除く)
>
> if( !isset($_GET['check']) ){
> print '不正な値';
> }elseif( $_GET['check'] == 'ON' ){
> print 'オン';
> }elseif( $_GET['check'] == 'OFF' ){
> print 'オフ';
> }else{
> print '不正な値';
> }
>
> 作る人のポリシー次第のような気がしますが
> 皆様はどうされておりますでしょうか?
ポリシーではなくベストプラクティスに従うのか従わないか、と言う
問題として捉える方が良いと思います。
大抵の場合、E_ALLを前提としてないコードの安全性の検証作業はE_ALL
を前提としてるコードより多くの時間が必要になります。
--
Yasuo Ohgaki : yohgaki @ ohgaki.net : http://www.ohgaki.net/
PHP-users メーリングリストの案内