C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: ASP.NET2.0 クライアントサイドJav


(過去ログ 32 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■15354 / inTopicNo.1)  ASP.NET2.0 クライアントサイドJavaScript
  
□投稿者/ osada (5回)-(2008/03/11(Tue) 19:17:21)

分類:[ASP.NET (VB)] 

お世話になります。

VS2005
ASP.NET2.0
VB.NETで開発をしております。

今回のトピック内容についてですが、クライアント側処理【Javascript】についてです。
私は毎回のようにJavascriptをごりごり書いているのですが、サーバー側でいう共通クラスのように
決まった処理を共通化し、関数を呼び出すように使用できるものなのでしょうか??
また、実現可能であれば、実際の例や参考URL等ご教授いただけないでしょうか。

素人質問で内容がわかりづらいかもしれませんが、どうぞ宜しくお願いいたします。

引用返信 編集キー/
■15357 / inTopicNo.2)  Re[1]: ASP.NET2.0 クライアントサイドJavaScript
□投稿者/ やじゅ (234回)-(2008/03/11(Tue) 20:45:50)
No15354 (osada さん) に返信
> 今回のトピック内容についてですが、クライアント側処理【Javascript】についてです。
> 私は毎回のようにJavascriptをごりごり書いているのですが、サーバー側でいう共通クラスのように
> 決まった処理を共通化し、関数を呼び出すように使用できるものなのでしょうか??
>

Javascriptのライブラリという意味合いですか??
「Javascript ライブラリ」で検索すれば、そこそこ使い方とかも出てきますけど
引用返信 編集キー/
■15358 / inTopicNo.3)  Re[1]: ASP.NET2.0 クライアントサイドJavaScript
□投稿者/ はつね (504回)-(2008/03/11(Tue) 21:03:09)
No15354 (osada さん) に返信
> 今回のトピック内容についてですが、クライアント側処理【Javascript】についてです。
> 私は毎回のようにJavascriptをごりごり書いているのですが、サーバー側でいう共通クラスのよ

jsファイルに定義しておけば共通的に利用できます。
http://allabout.co.jp/internet/javascript/closeup/CU20030521/index.htm
引用返信 編集キー/
■15365 / inTopicNo.4)  Re[2]: ASP.NET2.0 クライアントサイドJavaScript
□投稿者/ osada (6回)-(2008/03/11(Tue) 23:30:02)
やじゅさん
はつねさん

本当いつもいつもご回答頂きありがとうございます。
そうですか!jsファイルとして定義するんですね。
また、「Javascript ライブラリ」キーワードでもたくさんでてきました!
知らなかったです。jsファイル定義もライブラリも常識的な話のような気がするのですが。
Webにしてもクラサバにしても私はまだまだ経験値が足りないようです。

参考にさせていただきます。
本当にありがとうございます。

また、このトピックに関連して
「',[]!#$%&~」とかのSQL文発行時にエラーとなるような禁則文字列を
クライアント側Javascriptで除去できるようなJSサンプルとかって存在しますかね。
自分で書きゃいいのかもしれないのですが、どのように除去すればよいか
イメージがつかずに、未熟者ですみません。

ご存知でしたらご教授くださいませ。
よろしくおねがいします。

引用返信 編集キー/
■15378 / inTopicNo.5)  Re[3]: ASP.NET2.0 クライアントサイドJavaScript
□投稿者/ ちゃっぴ (92回)-(2008/03/12(Wed) 04:22:09)
ちゃっぴ さんの Web サイト
> 「',[]!#$%&~」とかのSQL文発行時にエラーとなるような禁則文字列を
> クライアント側Javascriptで除去できるようなJSサンプルとかって存在しますかね。
> 自分で書きゃいいのかもしれないのですが、どのように除去すればよいか
> イメージがつかずに、未熟者ですみません。

除去するんですか?Escape するのでは無しに?
まあ、正規表現使えば簡単にできるでしょうけど、これやるのは基本的に server-side ですよ。
Client-side で実施してもいいですけど必ず server-side で実装した上で client-side でも実装します。
Client-side のみで実装するのは絶対にやってはいけません。わかっているとは思いますが。
引用返信 編集キー/
■15382 / inTopicNo.6)  Re[3]: ASP.NET2.0 クライアントサイドJav
□投稿者/ はつね (505回)-(2008/03/12(Wed) 07:16:13)
2008/03/12(Wed) 07:20:19 編集(投稿者)

No15365 (osada さん) に返信
> 「',[]!#$%&~」とかのSQL文発行時にエラーとなるような禁則文字列を
> クライアント側Javascriptで除去できるようなJSサンプルとかって存在しますかね。

その文字、そのまま処理したらSQL文発行時にエラーになるけれど、ちゃんと処理すればエラーにならないですよ。
ちゃんと処理するにしろ、エラーを除去するにしろ、サーバーサイド「でも」処理しないとJavaScriptとめられているときや何らかの方法でチェック回避してPostBackされてきたら、それで終わりですよ。

それに、チェックしてエラーメッセージを表示するのならまだしも、有無を言わさず除去(もしくはちゃんと処理)するんだったらクライアントサイドスクリプトで行う意味はないです。

#以下、追記
個人的な感想ですが、「SQL文でエラーになる文字を除去する」という目的を最初に書いていれば約1日早く「JavaScriptで実装するようなものではない(意味がない)」という話に到達できたように思えます。

引用返信 編集キー/
■15383 / inTopicNo.7)  Re[4]: ASP.NET2.0 クライアントサイドJav
□投稿者/ myugaru (46回)-(2008/03/12(Wed) 07:33:44)
myugaru さんの Web サイト
No15378 (ちゃっぴ さん) に返信
No15382 (はつね さん) に返信

エラーになる文字列が来たときの処理なんですが

1.正しくエラー処理をして何もしない
2.エラーの文字列を除去して正常処理する
3.エラーになるがエラー処理がないので動作が不定

の3つだと思うのですが、お二人ともサーバーが3だと仮定されてますか?

たとえば

クライアント3、サーバー1

が現状で

クライアント2、サーバー1

にしたいとかの話かも知れませんよ?
本人に確認せずに勝手に仮定して怒ってもしかたないと思います。
引用返信 編集キー/
■15387 / inTopicNo.8)  Re[5]: ASP.NET2.0 クライアントサイドJav
□投稿者/ Mr.T (205回)-(2008/03/12(Wed) 09:22:30)
Mr.Tです、こんにちは。

No15383 (myugaru さん) に返信
> ■No15378 (ちゃっぴ さん) に返信
> ■No15382 (はつね さん) に返信
>
> エラーになる文字列が来たときの処理なんですが
>
> 1.正しくエラー処理をして何もしない
> 2.エラーの文字列を除去して正常処理する
> 3.エラーになるがエラー処理がないので動作が不定
>
> の3つだと思うのですが、お二人ともサーバーが3だと仮定されてますか?
>
> たとえば
>
> クライアント3、サーバー1
>
> が現状で
>
> クライアント2、サーバー1

今回SQLに対する質問であるわけで、その点から言えば2はやってはいけない
ように思います。
DBに対して、ユーザが保存をもとめた際、ユーザが入力した内容を勝手に
変更することになります。
それがユーザの誤った入力であるかどうかは、関係ありません。
保存できたのに、保存結果が異なる、意図しない結果になっているのは
まずいように思いますが...。
#あくまでもDBを扱うときです。
#もしかしたら、他では取り除くのがBestであるかもしれません

だから、「その入力は受け付けられない」と返すか、「意図した結果を
保持できるように無効化するか」のどちらかをするべきでしょ?
という意見だと思いますが。

引用返信 編集キー/
■15397 / inTopicNo.9)  Re[5]: ASP.NET2.0 クライアントサイドJav
□投稿者/ はつね (506回)-(2008/03/12(Wed) 11:53:38)
はつね さんの Web サイト
2008/03/12(Wed) 11:57:35 編集(投稿者)

No15383 (myugaru さん) に返信
> 本人に確認せずに勝手に仮定して怒ってもしかたないと思います。

クライアント側で処理される事を前提にサーバ側で何もしないのは問題ありって事です。
よってクライアント側で「エラーの文字列を除去して正常処理する」としても根本的な問題やSQLインジェクションなどの問題ははらんだままです。

質問者の現状で分かっている点は「特定の文字でサーバ側のSQL発行時にエラーとなる」という点です。
そして、その特定の文字を「クライアント側のJavascriptで除去したい」という事です。
この2点は、質問者の方が明記されている事であり、仮定の話ではありません。

このような問題を解決するには、次の2つの機能が必要です。
(1)受け付けられない入力である旨を利用者に通知する(サーバ側に必要な機能、JavaScriptでクライアント処理すると場合によっては操作性が良くなるかも)
(2)受け入れられない文字を除去または変換またはエスケープ処理をする(サーバ側に必要な機能、JavaScriptでクライアント側にあっても良い)
※エスケープ処理しているのが隠蔽されているのであれば(1)は不要

仮定しているとすれば「サーバ側で(1)や(2)相当の機能をいれてはいない」という点であり、もし、質問者から「入れているよ」とか情報がきて仮定が間違えていれば「経験上、考慮されていないケースも多かったのでサーバでやりましょうと書きましたが、それだったら安心ですね」と返信するだけの話ですし、何か今までの回答内容に影響がありますでしょうか。

# そもそも、質問者を怒っているつもりはない訳ですから、「怒っている」
# ということこそ仮定と域を出ていないですよ(笑)。



引用返信 編集キー/
■15442 / inTopicNo.10)  Re[6]: ASP.NET2.0 クライアントサイドJav
□投稿者/ osada (7回)-(2008/03/12(Wed) 20:25:15)
ちゃっぴ さん
myugaru さん
Mr.T さん
はつね さん

(1)受け付けられない入力である旨を利用者に通知する
JavascriptにてSQLインジェクションとなる警告アラートは出力する予定であります

みなさん私のグダグダなトピックに反応していただき申し訳ありません。
クライアント側で除去するにしろサーバー側で除去するにしろ、
自分で実装してみてから、こんなサンプル作ったんですけどどうですか?
とお聞きするのが筋ってもんですね。

申し訳ありません。

ただ、ひとつだけわからなかった点があります。

ちゃっぴさんのご回答にある
Client-side で実施してもいいですけど必ず server-side で実装した上で client-side でも実装します。
Client-side のみで実装するのは絶対にやってはいけません。わかっているとは思いますが。

上記のClient-side のみで実装するのは絶対にやってはいけません。とおっしゃられている
のは何故でしょうか?

両サイドで行わなければならないものなのでしょうか?

引用返信 編集キー/
■15445 / inTopicNo.11)  Re[7]: ASP.NET2.0 クライアントサイドJav
□投稿者/ ぽぴ王子 (328回)-(2008/03/12(Wed) 21:51:07)
ぽぴ王子 さんの Web サイト
No15442 (osada さん) に返信

ちゃっぴさんではありませんが。

> ただ、ひとつだけわからなかった点があります。
>
> ちゃっぴさんのご回答にある
> Client-side で実施してもいいですけど必ず server-side で実装した上で client-side でも実装します。
> Client-side のみで実装するのは絶対にやってはいけません。わかっているとは思いますが。
>
> 上記のClient-side のみで実装するのは絶対にやってはいけません。とおっしゃられている
> のは何故でしょうか?
>
> 両サイドで行わなければならないものなのでしょうか?

クライアントサイドは JavaScript などで実装しますよね。
私なんかはそうなんですが、ユーザーが JavaScript を無効にしてたらどうしましょう。
また、ブラウザがそういったスクリプトのサポートがないブラウザだったらどうしましょう。
実は Netscape 2 なんかを使っていて(それはさすがに古すぎか)こちらの意図したような
動きをしてくれなかったらどうしましょう。

なんてことがあるので、基本的にはサーバーサイドで実装するのが常であります。

で、それだといったんサーバーに送らないと何もできないことになってしまうので、簡単な
処理はクライアントサイドで実装する場合もありますが、上記のようにスクリプトを無効に
していた場合も考えて、クライアントサイドで実装したものはサーバーサイドでも実装する
のが普通だったりします。
引用返信 編集キー/
■15451 / inTopicNo.12)  Re[8]: ASP.NET2.0 クライアントサイドJav
□投稿者/ ちゃっぴ (93回)-(2008/03/13(Thu) 00:41:02)
ちゃっぴ さんの Web サイト
No15445 (ぽぴ王子 さん) に返信
> で、それだといったんサーバーに送らないと何もできないことになってしまうので、簡単な
> 処理はクライアントサイドで実装する場合もありますが、上記のようにスクリプトを無効に
> していた場合も考えて、クライアントサイドで実装したものはサーバーサイドでも実装する
> のが普通だったりします。

その理由もあるんですが、それ以上に大事なのは client で確認および問題ないように編集したところで、その処理が確実に行われたことを保障できないことです。

というのは、今回の問題には SQL injection の脆弱性が絡むからです。
SQL injection って言葉くらい聞いたことありますよね?ちゃんと理解していないのであればこの際調査して確実に抑えておきましょう。概要だけでも抑えればいかに危険なことをやっているかよくわかるでしょうから。

ちなみに client script を無効化していなくても、その脆弱性が公開されていればおそらくこちらの板を見ている人の 9割は脆弱性を突く攻撃ができるでしょう。
引用返信 編集キー/
■15575 / inTopicNo.13)  Re[9]: ASP.NET2.0 クライアントサイドJav
□投稿者/ osada (8回)-(2008/03/16(Sun) 18:36:43)
ちゃっぴさん
ぽぴ王子さん

ご回答頂きありがとうございます。
返信が送れてしまい申し訳ございませんでした。

Javascriptが無効なブラウザの場合、または、
Javascriptを無効にしている場合にはエスケープ処理(私の場合、除去処理)が走らず、
そのままサーバー処理にてクエリが送信されてしまう。

IEやユーザー任意の操作環境設定によって左右されるということですね。
勉強になります。
全く考えていませんでした。

現在『ASP.NETでいってみよう』SEから出版されている本をよんでいます。

おっしゃられた内容が載っていました。
少し勉強しますね♪

ありがとうございました。
引用返信 編集キー/
■15576 / inTopicNo.14)  Re[10]: ASP.NET2.0 クライアントサイドJav
□投稿者/ osada (9回)-(2008/03/16(Sun) 18:39:34)
ごめんなさい。
解決すみデス。
解決済み
引用返信 編集キー/
■15585 / inTopicNo.15)  Re[11]: ASP.NET2.0 クライアントサイドJav
□投稿者/ ちゃっぴ (95回)-(2008/03/16(Sun) 23:28:18)
ちゃっぴ さんの Web サイト
事前確認はちゃんと考えて実施しよう
http://blogs.wankuma.com/tyappi/archive/2008/03/14/127611.aspx

こうゆうのを書いたので参考にしてください。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -