[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 メーリングリストの案内