サーバー側のデータチェックの必要性

このQ&Aのポイント
  • サーバー側のデータチェックの必要性について
  • Javascript側でのデータチェックのみでは不十分
  • なぜサーバー側でもデータチェックが必要か
回答を見る
  • ベストアンサー

サーバー側のデータチェックの必要性

現在JavaとJavascriptでWebアプリケーションを制作しています。 サーバーとの通信はすべてAjaxを使用して、Formで渡すような方法は取っていません。 Javascript側では細かいデータのチェックは行っているのですが、Java側ではデータのチェックを行っていません。 Ajax通信であるため、仮にブラウザでJavascriptを「無効」にしてしまうとAjaxそのものが起動しないためデータをサーバー側に送ることができなくなります。 このことを利用して、Javascript側で完璧なデータチェックを行い、Java側でのデータチェックを省略しています。 ただ、多くの手引書を見るとサーバー側(Java側)でもデータチェックを行う必要があると書かかれていますが、Ajaxのみで通信しているシステムにもこのことは当てはまるのでしょうか。 私の場合どのような危険性や問題点があるかご指摘ください。 よろしくお願い致します。

  • Java
  • 回答数3
  • ありがとう数7

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.1

サーバ側にアクセスしてくるのが正規のページからだけとは限りません。 JavaScriptのプログラムを見ればサーバ側のどこへアクセスしているかはすぐ分りますから、悪意のある攻撃者はそこへいろいろなデータを送りつけてきます。 サーバ側でデータチェックを行わずに処理するとSQLインジェクションやバッファオーバーフロー等を起させるのは容易になってしまいます。

coonyanp
質問者

お礼

やる人は正規ページ以外から入ってアクセスしてくるんですね。 いろいろな手引書に書いてあったのが納得できました。 一遍には難しいですが、少しずつJava側のチェックも入れていくことにします。 ありがとうございました。

その他の回答 (2)

回答No.3

Ajaxを使おうが、Formを使おうが、サーバーとクライアントの 通信は、httpで通信しているだけです。 そのhttp通信データを調査し、同じような通信をする 別のJavaScriptプログラムを作ってサーバーにアクセスすれば、 あなたが自分が作ったJavaScriptでいくら完璧なチェックをしても 無意味です。 もっと簡単で誰にでもできる方法として、 http://www.websec-room.com/2013/08/10/961 で紹介されているFiddlerを使ってみてください。 あなたが作ったJavaScriptプログラムのAjax通信を トラップし、パラメータを一部改ざんしてサーバーに 送信できます。 この記事では、簡単にわかりやすくするために Formを使ってリクエストするものを使って説明していますが、 http通信データを改ざんするものであるため、 FormとかAjaxとか関係ありません。 ぜひあなたのプロジェクトでFiddlerを使ってみてください。 JavaScriptでのパラメータチェックがセキュリティ的に いかに意味のないものであるか実感できると思います。 JavaScriptでのパラメータチェックは、ユーザビリティの 向上が主な目的です。

coonyanp
質問者

お礼

確かにAjaxでもFormでもhttp通信には違いはありませんね。 Fiddlerのことを教えて頂いたので、一度Fiddlerを使って実験をしてみたいと思います。 有益な情報をありがとうございました。

  • hwoa1024
  • ベストアンサー率36% (122/336)
回答No.2

そのアプリケーションがどの程度の規模で使用されるかによります。 イントラ内でしか使わない、とか 漏洩しても問題ない程度のデータをSELECTしているだけ、とか。 上記であれば気にしなくていいと思います。 完璧に制限する労力に見合わないですから。 一般公開していてログインや情報の編集等があるのであれば サーバー側でも完璧に制限するべきだと思います。

coonyanp
質問者

お礼

おっしゃる通り、人的・時間的なコストとのトレードオフですね。 幸い業務処理用ですので漏洩して困るようなデータではないのですが、パブリックのサーバー環境を使用しているため、少しは気遣った方がよいですね。 貴重なご意見ありがとうございました。

関連するQ&A

  • AjaxとJava

    私はAjaxの勉強をしようと思っています。 そのため、簡単なサーバ側はJavaのアプリケーションを作って学ぼうと思ったのですが、どうやって通信すればよいかよくわかりません。 一応わからないなりにいろいろ方法を考えてみたのですが、どれも疑問点があります。 (1)、サーバをJavaで作成して、Ajaxと通信する方法 (2)、JSPを使って、Ajaxと通信する方法 どちらの方法も、 (1)どうやってAjaxからの(正確にはJavaScriptからの)リクエストを受け取って、値を取り出したらいいか (2)どうやってサーバからJavaScriptにデータを送るのか がわかりません(送るパケットは極めてシンプルなもの、たとえば数字とか文字列がいいです)。 入門サイトはほとんどのサーバ側はPHPで作っているので、あまり参考にならないと考えています。 なにか参考になるようなサイトなどはないでしょうか? お返事お待ちしております。

  • フォーム入力チェックはCGI(サーバ)で行う必要がありますか?

    漠然と思ったのですが、HTMLの入力フォーム値のチェックをCGIでは行わずに、Javascriptのみで済ませる方法はないでしょうか? Javascirptだけでチェックできればサーバ側の言語が、Perl、PHP、JSPのどれであっても同じ入力チェックを使えるので楽だなぁと思いました。 ただ、JavascriptをOFFにして直接URLに値を埋め込んだ場合、入力チェックを素通りしてしまいます。 Javascriptの有無をサーバ側で判定は不可能?な為、やはりサーバ側で入力チェックを行うしかないでしょうか? よろしくお願いします。

    • 締切済み
    • CGI
  • レンタルサーバでJAVAを起動させられませんか?

    JAVAアプリケーションをサーバに置き、クライアント側のJAVAアプレットと通信させたいのですが、レンタルサーバにFTPでJAVAアプリケーションをアップしましたが、起動させられません。 レンタルサーバで提供されているSSHでサーバにログインしましたが、「>JAVA アプリケーション名」では「command not found」のようなことを言われてしまいます。 何か方法はないのでしょうか? よろしくお願いします。

  • アプレットからサーバ側のプログラムを起動したいのですが…

    仕事でJavaを使うことになったのですが、プロジェクト員一同Java初心者で、必死にJavaを勉強していますが、以下のことで困っています。申し訳ありません。助けてください。 UNIXサーバ側の設定とかをいじるプログラムがあるのですが、それをアプレットにして、SEさんがリモートからでも操作出来るようにしろ、と言われました。 とりあえず、Javaアプレットからサーバ側(アプレットのクラスが置いてあるのと同じマシン)のCプログラムを起動し、その結果を受け取るようにしたいのですが、Java経験者に相談したら「アプレットにはセキュリティ上の問題があるのでCGIかServletを使わないと出来ない」と言われました。 では…とServletの勉強を初め、サーバー側にServletEngineをいれてみたのですが、 ServletはHTTPポートと違うポート(8000番とか)を開けてそこにアクセスしなくてはいけないようにみえます。それならクライアント側プログラムをアプレットにし、サーバ側プログラムとSocket通信で結び、サーバ側プログラムがCプログラムを起動、としたほうが楽そうですが、ひとつしかポートを開きたくないと言われたのです。 もしかして「アプレット+Servlet が アプレット+CGI相当」じゃなく「Servlet が アプレット+CGI相当」なのでServlet用のポートだけ開けとけばいいとかいうことでしょうか?  とか思っていたら、JNIでC言語のメソッドをJavaメソッド扱いするとかいう話も小耳に挟みました。それでできるのかしら? ・webポートだけを開いて ・サーバ側のCプログラムを起動してその結果を受け取る ・クライアントのマシンにあらかじめインストールしなくても、ブラウザからアクセスすると操作が対話的に出来るような ものを簡単に作ろうとしたら、一体何を勉強するべきなのでしょうか…。 Applet+CGI? Applet+Servlet? RMI? JNI…? 助けてください…(TT)

    • ベストアンサー
    • Java
  • サーバ側のプログラミング言語

    サーバ側のプログラミング言語としてどれが優勢なのでしょう。 CGI、Perl、PHP、JAVA、rubyが代表的なところのようです。 ざっくりと見た感じではPerlの方がCGIよりも良く、 更にPHPとPerlではPHPが優勢と読めました。   でも、WebでまだまだJAVAは耳にしますし、 rubyは国産で力を入れてるとか。 CGIは今後廃れていくのでしょうか。 JAVAはどうなるのでしょう。 何かご意見があればお願いします。

  • Javascriptでサーバー内のファイルを読むには

    最近HPの制作を始めたものです。 Javascriptを使用してサーバー内にあるファイル(テキスト)を読んで、次々表示させるというページを作ろうと思っているのですが、その方法が分かりません。 Javascriptでは出来ないのでしょうか? また、Java Appletなら可能でしょうか? どなたかどうぞ宜しくお願い致します。

  • サーバからクライアントにポート番号を指定する方法

    java初心者です。 現在javaを使ってサーバとクライアントのsocketプログラムを作っています。 動作としてはサーバ側がクライアントに対して接続するポートを指定し、以後クライアントがサーバに対して通信を行う際には指定されたポート番号を使って通信を行うような動作をさせたいのですがうまくいきません。 そのため、みなさんの知恵を拝借したいのですが、アドバイス等頂けないでしょうか。 また、javaでは実現不可能だとするのでしたら、その理由も詳しく教えていただけると幸いです。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • JQueryはAJAXとは無関係??

    質問◆JQueryおよびJQueryMobileは「AJAX」とは無関係なのでしょうか? 「JQueryMobileを使っているとき、DOMによってHTMLを動的に差し替えている」という認識なのですが、 特にRequest関連の記載をJavaScriptで記載していない限り、AJAXの処理は行われないのでしょうか? それとも、 JQuery Mobileを使っている場合は、ページ遷移などで、プログラマが意識していなくても(独自にプログラムを書いていなくても) AJAXの処理が行われているのでしょうか? /************************************/ サーバへのリクエストはなくても、1つのマシン内の、HTMLファイルとHTMLファイルの間で、 HTTPで通信がされるということはないと思っています。 (※基本、HTTPはクライアントとサーバの間のときしか使われないのですよね?) JQueryの技術情報のサイトを見ていると、 よく「document.ready」と書かれていたりするソースを見かけますが、 これはAjaxとは関係なく(通信とは関係なく)、 また「xhr.send」も書かれていないHTMLは、AJAXは使われないという理解です。 (「Form、submit」とも関係がない) XMLHttpRequestも「HttpRequest」とあるわけですし、 「Form、submit」を書いているときに行われるわけではないけれども、かわりに、 「xhr.send」とJavaScriptで実行されたタイミングで走る処理であり、 その際、「サーバから返される情報がXMLのデータ形式で(XML以外もですが、、)」だという理解なのですが、合っていますでしょうか?

    • ベストアンサー
    • AJAX
  • サーブレットはサーバーと同期型、AJAXは非同期型の意味が分かりません

    サーブレットはサーバーと同期型、AJAXは非同期型の意味が分かりません サーバーサイドjavaとか、サーブレットはクライアント側(ブラウザ側)と サーバー側とは同期型だけど、AJAXは非同期型なので軽くて、速いと参考書とかに 書いていましたが、非同期型とはどのような意味でしょうか。  クライアントの意図する情報を先読みして、その情報をバッファとしてサーバーとか に取り込んでいるとか、クライアント側に送信しているとか聞いたことがあるのですが。

    • ベストアンサー
    • AJAX
  • ファイルのサイズチェックってできないのですが?

    メールフォームを作成しているのですが、添付するファイルのサイズチェックで行き詰まってしまいました。 JavaScriptでファイルのサイズチェックはできないのでしょうか? CGI(perl)でファイルの添付を可能としたメールフォームを作成したのですが、サーバー(prel)側でのサイズチェックはでき動作はするのですが、10MB/100MBの重いファイルの場合、一度サーバー側へデータが送られてからしかサイズチェックが動作しない為、非常に長い時間、ブラウザが固まったような状態がつづきます。それを解消したいのです。 JavaScriptでファイルのサイズチェックを行えればとおもったのですが可能なのでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう