どういうタグをつければいいのかわからないので、タグは適当です^^;
今一緒に仕事をしている人(仮にAさんとします)とコーディングというか実装というか、その辺りで考え方が違いすぎて全く噛み合わないので、
どちらが正しいのか識者の方に意見を伺いたいと思います。
WEBアプリケーションの開発をしています。
Aさんが作った部分を私がテストしたらサーバーサイドで入力値の長さをチェックしていませんでした。
それを指摘したことろ、Aさんは「何言ってんだコイツ」みたいな感じで「inputにmaxlength付けてるのになんでそんな無駄なことしなきゃいけないんだ」と反論されてしまいました。
私はmaxlengthなんてブラウザの開発者ツールで変更できるし、サーバーサイドでも長さチェックすべきと言い返しましたが
鼻で笑われました。
Aさんが作った既存のシステムでinput要素のmaxlegthを変更して長いデータを送ったところエラー画面に遷移しました。
たぶんinsert文でコケたんだと思いますが、Aさんは「そんなことする奴は滅多にいないし、仮にいたとして何か問題でも?データが消えたり壊れたりするわけでもないし。」と言っていました。
自分の取り越し苦労が過ぎるのか、Aさんがルーズ過ぎるのか、どっちでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答11件
0
フロントエンド側のJavaScriptを動かすための入力の場合は別ですが、そうでない場合(バックエンドにそのまま流す値)のフロントエンドバリデーションは、入力補助のためにあると考えてください。
DBレベルで不正入力を弾けるのならそれでいいのですが(関連質問)、万が一にも不整合なデータが入ってしまうと、あとあと苦労することになります。
投稿2017/06/26 11:54
総合スコア145932
0
ベストアンサー
事業のフェーズや性質によると思います。
例えばスタートアップのプロダクトで、とにかくスピード感とプロダクトマーケットフィットの検証を!というはなしであれば、Aさんの論調はケースバイケースで正しいです。スピードをとります。(ただし、これは後のフェーズでやりもれがないようにちゃんとタスクとして残しておき、管理する)
ケースバイケースといったのは、セキュリティ関連はたとえ上記のようなパターンでもNGです。
反対に、例えば受託の納品する成果物としてなら、不良品レベルですね。クライアント会社側で気づきづらいだけ悪質とも言えます。プロしか気づけない欠陥なんだがらそこはプロとして品質保証すべきでしょう。悪質な受託会社として名を馳せたいのなら正解ですが。
投稿2017/06/26 11:34
総合スコア824
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/26 11:59
2017/06/27 11:45
2017/06/27 11:53
0
システムの仕様書やテスト仕様書が
どのレベルまでのチェックを必要としているかに依存するかも。
そこを決めずに書いていてコーディングの品質がばらつくのは問題あり。
個人的には、サーバー側でしっかりバリデーション処理を書きます。
面倒でも、事前にわかっている、不都合な文字(列)を含んでいたら排除するように。
テスト仕様書にも異常文字列のテスト項目を載せたことがありますし。
投稿2017/06/26 11:28
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/26 11:50
退会済みユーザー
2017/06/26 12:15
0
社内で使われるのが前提で、
そんなことする奴は滅多にいない
のなら、まぁいいかなとは思います。(私は気持ち悪いので、普通にチェックするべきだと思いますが)
データが消えたり壊れたりする
この可能性があるなら、サーバサイドでのチェックは必須です。
そもそもで、MVCモデルでいうとMの部分が長さチェックをするわけで、ブラウザの機能なんて関係ないですし、
今は知らないけど、maxlengthが文字数なのか、バイト数なのか昔はブラウザの実装が違うので
そもそも使えなかったですね。
投稿2017/06/26 11:15
総合スコア4826
0
基本的に仕様書がどうなっていようがサーバーでの入力チェックは必須です。
フロント側での入力チェックはユーザーの利便性のためです(入力の不備を早い段階で教えるため)、フロント側で入力チェックするからOKなどという仕様書は見たことがありませんし、記載していないのならば確認すべき基本的な事項です。
どんなシステムであれサーバー側の入力チェックなしにDBに突っ込むことなど有りえません、というかSQLインジェクションとか大丈夫なのか心配になってきます。
投稿2017/06/27 06:20
編集2017/06/27 06:32総合スコア930
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
すでに解決済みですがコメントさせていただきます。
私は基本的考えとして「DBに格納するものはサーバサイドのチェックを必須にすべき」と思います。
AさんはAさんなりの意図があってのことだとは思いますが、
Aさんの品質はそのまま会社の品質になります。
intronさんの品質もそのまま会社の品質になります。
「私たちがお客様に提供する製品の品質としてどうあるべきか」を考えるべきで、誰かの意見だけで品質決定してしまわないことが重要だと思います。
納期や費用の問題もありますから、すべてのシステムを完璧にとはいかないのが現実です。
そういう場合にどこにリソースを費やしどこのリスクは許容するのかといったことは、会社の決定または品質管理に責任ある者の決定に従うことだと思います。
あとは、後々「なんでこうなってるの?」という疑問が出ることは間違いないでしょうから、ドキュメントでも検査項目書へのコメントでもノートのメモ書きでもとにかく何でもよいので痕跡を残すことです。
それが後で自信の身を助けてくれるはず。(実体験)
がんばってください。
投稿2017/07/06 06:36
総合スコア3116
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一般論ではサーバー側でもチェックした方が良いでしょうね。ただ、私の場合、以下の条件を満たす場合、サーバー側での長さチェックは意図的に省略しますね。
- 事前チェックが機能する、JavaScriptが動作していることがほぼ保証できる。
- Webサーバーである程度長さ制限がしてある(DoS対策として)。
- パラメータクエリなど、SQLインジェクション対策がしてある。
- 文字が長すぎる場合、DB側でエラーになることが分かっている。
- エラーになってもデータ不整合は起きない。もう一度実行すればリカバリーできる。
まず起こらない無駄なエラーチェックを機械的に延々と書くと、下手すると本来の処理よりエラーチェックのコードの方が多いなんてことになりかねません。そうなると保守性が著しく低下します。私の場合、保守性の高さに特に気を配っているので、データ不整合、セキュリティ、変なエラーメッセージが出てユーザーが混乱、これらを回避する必要最小限のチェックに留めるようにしてます。私のような考えは特殊だし、このような書き方をするのは凄く大変です。全体のデータの流れ、チェックのされ方を全部計算しないとできませんので。
Aさんが普段バグがほとんどない、信頼性の高い、保守性の高いコードを書く人なら、その人は計算して書いているから考え方を学んだ方が良いし、逆ならコーディングルールとして強制した方が良いでしょう。結局、その方のレベルや考え方次第だと思います。
投稿2017/07/04 10:08
編集2017/07/04 10:13退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/07 14:11
2017/07/12 06:25
0
BAが出ていますが考え方を整理するために書いてみます。
バリデーションチェックは大きく分けて3つのフェーズがあると思います。
すなわち、ブラウザ・(サーバー)アプリケーション・データベースです。
基本はアプリケーションレベルのチェックでしょう。要件が許せば、長いテキストは勝手にぶった切ったり、範囲外の数値を最大値にぶった切ったりの乱暴も許します。これはデータベースに格納できるサイズであってもアプリケーションの要件で決めるべき内容です。すべての制約を管理できるのはアプリケーションでしかできず、ほかで管理すると記述が分散して管理が難しいからです。
データベースはアプリケーションが許容したすべてのデータを格納できるように設定できるべきです。このレベルでのエラーはユーザーのミスではなく、システムに問題点を抱えてると考えないとデータベースはビジネスロジックを定義することになり、管理上の混乱(バグの巣)になります。Aさんの組んだシステムがInsertでエラーになっているとすれば、感心できませんし、恐らく項目名とエラー内容をユーザーに伝えられていないか、他のエラーでも同じメッセージになっていないか心配してしまいます。
また、データ構造と関係のない制約をテーブル定義に入れるとシステムの拡張が難しくなります。データベースの変更はアプリケーションの変更よりコスト高なのです。
ブラウザ上のバリデーションは全く別の問題への対処になります。すなわち、アプリケーションでのバリデーションができている上で、ユーザーが入力中に誤りに気づく様にです。本気でユーザーがそれを入力しようとすると入力できてしまうので、その点でAさんの指摘は正しいとおもいます。
あと、Aさんが鼻で笑ったのは納得させる自身がないので感情や立場などで押し切ろうとしたんだと思います。つまり、あまり気にしなくて良いと思います。
だからと言って間違っていると決めつけるのも違うかもしれません。手間と効果が釣り合わないことは多く、手間の説明は難しいものです。
投稿2017/07/12 03:52
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。