質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

3回答

957閲覧

バックエンドの入力チェックについて

mk222222

総合スコア59

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

1クリップ

投稿2019/01/28 04:17

編集2019/01/28 04:45

入力チェックについてです。

現在作っているプログラムで、
バックエンド(java)
バックエンド(pl/sql)
の二つで同じ入力チェックを行っているのですが、

どちらもバックエンドの入力チェックじゃないですか。

そこで疑問が生まれました。

フロントエンドとバックエンドで2つ入力チェックをするのはjsが効かない場合を想定して実装します。

でもjava側とpl/sql側両方で入力チェックをするのは何か合理的な意味があるのでしょうか?それとも無駄な処理でどちらかの入力チェックを外してもいいのでしょうか?よろしくお願いします。

やってる処理は
1.画面でcsvを指定。
2.java側で入力チェック後、プロシージャ呼び出し
3.プロシージャ側で入力チェック後、データ登録
って感じです。

javaとプロシージャのソースの一部を以下に抜粋

java

1private void doUpload(){ 2 // 取り込みファイル 3 FormFile localFile = testForm.getFiles(); 4 5 // ファイルの行単位チェック 6 BufferedReader checkBr = new BufferedReader(new InputStreamReader(localFile.getInputStream(),rcvFileEncoding)); 7 String checkLine = null; 8 9 long rowCount = 0; 10 while ((checkLine = checkBr.readLine()) != null) { 11 rowCount++; 12 // ファイル行のレングスチェック 13 if(checkLine.getBytes(rcvFileEncoding).length != 128){ 14 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.file.format",rowCount)); 15 log.debug("RecodeSizeError"); 16 return; 17 } 18}

plsql

1-- ファイルオープン 2vHandle := UTL_FILE.FOPEN(vFilePath, PRM_I_06, 'r'); 3LOOP 4 BEGIN 5 6 -- ファイルを1行読み込み 7 UTL_FILE.GET_LINE(vHandle, vReadLine); 8 9 -- 書き込み行数を加算 10 nLineCnt := nLineCnt+1; 11 12 -- データ長チェック 13 IF LENGTHB(vReadLine) != 128 THEN 14 GOTO err_hand; 15 END IF; 16

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/28 04:28

実際のコードを提示された方が良いかと。どこでなにをどのようにチェックしているかの情報をご提示いただかないことにはそもそも適切か不適切かの判断がつきません
mk222222

2019/01/28 04:30

わかりました!おまちください!
guest

回答3

0

編集中とは思いますが、大きく勘違いされている箇所があるのでそこは覚えていただきたいところとして回答します。

フロントエンドとバックエンドで2つ入力チェックをするのはjsが効かない場合を想定して実装します。

いえ。違います。

JavaScriptが効いたとしてもフロントエンド側の情報はブラウザのデベロッパーツールから編集することができます。それがHTMLに保持しているデータに限らず、JavaScript自体もいじることができます。
つまり、どんなに厳密なチェック処理をフロントエンド側に書いていたとしても、それはあくまで見た目だけで、スルーさせようと思ったらできるわけです。

バックエンド側はアクセスしているユーザーからはいじることができません。
サーバーに送られる直前にデータを偽装したり送ってはいけないデータを送られたとしても、
正しいデータが来ているかなどシステム側でチェックすることができます。

下記のような質問が昔ありました。

回答にあるのは基本的に「そんなことはない」ですね。それぞれ回答熟読してください。
「むしろ省略できるのはクライアントチェック」というコメントもあります。

でもjava側とpl/sql側両方で入力チェックをするのは何か合理的な意味があるのでしょうか?それとも無駄な処理でどちらかの入力チェックを外してもいいのでしょうか?よろしくお願いします。

「pl/sql側のチェック」がどのようなチェックをしているか分からないのでここは質問に追記してもらうとして、もしJava側で出来ないチェックがあるのでしたら外すべきではないと思います。

乱暴な言い方をするとやりすぎたくらいがちょうどいいです。

投稿2019/01/28 04:44

m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mk222222

2019/01/28 04:50

ひぃ!詳しい補足情報ありがとうございます。 勉強になります
guest

0

一般論で言うと、まず、受け取り側でのチェックは必須です。不正な処理をしないために。
その上で、手前でチェックするのは、エラーをより早く発見するという効果があります。

あと、今回のケースで当てはまるかどうか分かりませんが、管理者が違う2つのサブシステム間でのデータのやりとりの場合は、両方でチェックすると思います。

投稿2019/01/28 06:12

otn

総合スコア84712

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

自分ひとりしかこのプログラムは触らない、というのであれば、入力チェックを1つ減らしても想定外の動きはないでしょうし(たぶん)問題ないのかもしれません。

ですが、大人数で開発していると自分が作ったメソッドを気づいたら他のところで使っているのはまぁある話で・・・。
もしSQL側のチェックを外してJavaだけにするとしたら、
他の人が別ルートでCSVファイルをそのプロシージャを使って登録したとき、lengthチェックがなくてエラーなんてことになったり・・・。

よっぽど重たいチェックでなければきちんとチェックしておくに越したことはありません。

それでも片方外したいというのであればドキュメンテーションコメントで入力チェックについての説明を書いておく・・・とか?

「他の人がこのメソッドを使ったときに問題ないか」を考えてみるといいかもしれませんね。

投稿2019/01/28 05:09

azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mk222222

2019/01/28 05:29

なるほど、今はこのプロシージャはこのjava処理からしか呼ばれてないので大丈夫だけど、 今後別の処理でこのプロシージャを利用するかもしれないってことですね! そう考えるとjava側のチェックがいらない・・? 参考になりました。ありがとうございます。
azuapricot

2019/01/28 05:33

まぁ最終処理でやっちゃうのが一番簡単ではありますが、 その途中経過でCSVの長さを使った処理などが入らない保証もないですし 入れておくのが安全かなぁ~~~~~~~とは思います
mk222222

2019/01/28 05:40

ほぉーーーーー確かに。 実はどっちもチェックあったらテストめんどいなァと思って 今回の質問しましたw ありがとうございました。
azuapricot

2019/01/28 05:53

テストめんどいなァはめっちゃわかります() でもそれが後々の品質に繋がりますし、クライアントがいるなら信用にもつながりますし、 今ちょっとめんどくさくても、後々修正しなきゃいけなくなるよりは楽なはずなので・・・笑 頑張ってください~~。
m.ts10806

2019/01/29 08:02

面倒なことを人間のかわりにやってくれるように組むのが仕事ですしね。 面倒だといって省略したら必ず大事故が起きます。そこで発生しうるコスト・信頼の失墜を天秤にかければ選択肢はそう多くはないでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問