人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【急ぎ】Javascriptのみでの入力チェックではだめ?

WEBから入力して登録するシステムを作っているのですが、いっそのこと入力チェックはJavascriptだけではだめだろうかと考えています。

フォーム自体でJavascriptを使って表示しているものもあるので、「Javascriptをオフにしている人がいるかも」ということは気にしません。

フォーム自体をJavascriptで書いていれば、オフにして送信できないし、何かまずいことはあるかなと考えています。

JSで入力チェックをして、それでもおかしなデータで送信してくるデータはエラーとして、登録処理を終わりにすればいいし、DBに登録する部分でサニタイズもしています。

JSだけでも十分なのか、だめならだめな理由と対策があればありがたいです。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB JavaScript js Web いるか
○ 状態 :終了
└ 回答数 : 10/10件

▽最新の回答へ

1 ● m-down
●18ポイント

http://q.hatena.ne.jp

URLはダミーです。

JavaScriptだけでは不十分です。

例えば、まず作ろうとしているWEBページを一度ファイルに保存します。次にファイルをメモ帳で開きJavaScriptの部分を削除します。

すると、どんな値でもPOSTできることになり、システムとしても非常に危険なものになりますが。。。

◎質問者からの返答

送信ページのURLをチェックして、決まったURL以外ははじくことで防げると主ますが、いかがでしょうか?


2 ● zifree
●17ポイント

悪意を持ったユーザがWebページをローカルに保存し、htmlを書き換えて不正なデータを送ってくる可能性は考慮していますか?

完璧ではありませんが、登録時にサーバ側でRefererをチェックする位は行ったほうがいいでしょう。

(Referer自体も簡単に偽装できてしまうものですが・・・。)

また、

> DBに登録する部分でサニタイズもしています。

とありますが、もし登録前に確認ページを表示するのであれば、確認ページを表示する時点でサニタイズが必要です。

さもないとクロスサイトスクリプティングの標的になるおそれがあります。

http://www.e-3lab.com/security_guideline/

http://www.atmarkit.co.jp/fsecurity/rensai/hoshino03/hoshino04.h...

◎質問者からの返答

確認ページを出さないつもりです。

出さないつもりです。

登録ページのURLをチェックして、それでも何か問題はあるでしょうか?


3 ● keisukefukuda
●17ポイント

http://www.linuxworld.jp/special/-/11244-3.html

攻撃者がブラウザしか使わない、という前提を置けば大丈夫なような気がしてしまいますが、実際には知識を持った人間がプログラムを書けば、情報の偽造はいくらでもできます。Javascriptのチェックは実質的に無意味です。Refererチェックも、多少のチェックにはなりますが、根本的な対策ではありません。

なので、いずれにしてもサーバー側でのデータのチェックは完全にやる必要があります。

このように、サーバー側のチェックがJavascriptに頼らず完全であるという上でなら、「チェックではじかれたデータについて、エラーページを表示せずに(手間を省いて)無視したい」という処置は無しではないと思いますが、Javascriptでの入力チェックの分だけ手間が増えていることになるので、あまり意味を感じません。

◎質問者からの返答

すでにある程度アプリケーションができていて、そこに機能を組み込むのですが、postされたデータのチェックをして、エラーがあったら、再度入力されたいたデータを表示して、エラーも出して…というのがとても面倒に感じてしまっています。

それならば、jAVASCRIPTのチェックで悪意のあるユーザー以外を対処し、悪意のあるユーザーは、サーバーでチェックして、無視すればいいかなと考えています。


4 ● tpichu
●17ポイント

他の回答者の方もおっしゃられていますが、残念ながら不十分になります。悪意を持ったものが少しでも知恵を絞れば、XSSの可能性があります。

Javascriptの使用か不使用問わず、悪意を持った人が任意のhtmlを作り、もしくはプログラミング言語などを使い、送信先のCGIなどへデータを送ることが危惧されます。

登録ページのURLをチェックすることについてですが、それは不十分です。普通、チェックにはリファラを用いますが、それは簡単に偽装できますので、無意味です。

送信先で(サーバーサイドで)チェックをすることを薦めます。

http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B...

◎質問者からの返答

送信元でのチェックは悪意のあるユーザー用ですよね。

悪意のあるユーザーの対策はサーバーでするとして、一般ユーザーの処理で、いちいち、入力された内容を保持して、再度フォームに表示させて…が面倒なんです。

考え方まちがってますかね?

一般ユーザーとしてはわざわざページが遷移しないで、そのままの表示でエラーをアラート表示して、アンカーで飛ばしてくれたりした方がよっぽど親切だと思うんです。

Ajaxで入力チェックと言う手もありなんでしょうが、どうでしょうか?


5 ● b-wind
●17ポイント
それでもおかしなデータで送信してくるデータはエラーとして

という事なので、サーバー側でもバリデーションをしているのでしょうか?

しているのでしたら一応問題はありませんが質問の趣旨としてサーバー側でのチェックはしていない物として回答させていただきます。


http://ash.jp/net/telnet_http.htm

HTTP のアクセス程度なら、その気になれば TELNET でも偽装できますし、クライアントサイドでの機能を過信するのは無謀です。

また、実際のアプリケーションでは登録画面だけではなくその情報をメールや管理画面でも閲覧する事になるでしょう。

本来予定しているデータ以外が混入するのは運用上問題もあるでしょうし。


対策としては同じバリデーションをサーバー側でも行うしかありません。

使用している言語が分からないので具体例は出せませんが、

フレームワークによっては一回の記述でクライアント・サーバーサイドのバリデーションコードを生成してくれるものもあります。

http://q.hatena.ne.jp/1165754185

◎質問者からの返答

サーバー側でもバリデーションはしますが、全体として○か×だけの分岐にして楽しようかと考えています。

悪意のあるユーザー以外はJsでのチェックの方が親切ですよね。

悪意のあるユーザーの処理は「全部の条件に合ってなかったら、無視する」というだけでいいと思うのです。


1-5件表示/10件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ