- PR -

テキストボックスの入力制限をするには? (Windows.Forms)

投稿者投稿内容
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-05-13 17:23
引用:

technocutさんの書き込み (2008-05-13 15:48) より:

ここでいうクラッキング手法等とは、具体的にはどういうことが考えられるんでしょうか?


私の足りない脳みそでは、SQLインジェクションくらいしか思いつきませんでした…。
technocut
会議室デビュー日: 2008/05/13
投稿数: 2
投稿日時: 2008-05-14 11:43
みなさん回答ありがとうございました。

引用:

じゃんぬねっとさんの書き込み (2008-05-13 17:15) より:
最後に ValidateChildren していればですが、SetWindowText とか SendMessage とかは防げますね。 Validating イベント自体は避けられますので、各々の Validating イベントよりか本処理直前でのチェックこそが必須ですね。



たとえば数字であればなんでも良い項目があるとすると、WM_CHAR、WM_PASTEでチェックして、Validatingは省いちゃう手もありなんですかねー。
クリティカルなシステムでは、そうはいかないでしょうが。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-05-14 12:11
引用:

technocutさんの書き込み (2008-05-14 11:43) より:

たとえば数字であればなんでも良い項目があるとすると、WM_CHAR、WM_PASTEでチェックして、Validatingは省いちゃう手もありなんですかねー。
クリティカルなシステムでは、そうはいかないでしょうが。


WM_CHAR、WM_PASTE を抜きにしても Validating 自体は省いても、最終チェックがすべてではないかと思います。 入力自体の制限は検証ためというよりユーザビリティのためのものですから。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2008-05-14 18:25
引用:

technocutさんの書き込み (2008-05-13 15:48) より:
通りすがりかつ全く話は逸れるんですが、よかったら教えてください。

引用:

RUNさんの書き込み (2008-05-12 02:09) より:
クラッキング手法等での不正データの入力がされる可能性をはなっから無視してValidatingの手を抜いていいものではない。



ここでいうクラッキング手法等とは、具体的にはどういうことが考えられるんでしょうか?



具体的な手法というのは、あまり考えていません。
というのは、自分が知っている全ての手法による異常データをシャットアウトしたとして、自分が知らない手法による異常データの入力をされた時に、
自分が知らない手法だったのだから、仕方ないとはいえないでしょ?

その為に、Validatingと実行前チェックの2重チェックは不可欠と自分は言っています。

じゃんぬねっとさん、綾さん
Validatingチェックの回避の可能性のご指摘ありがとうございます。

個人的には2重チェックともに必須と考えていますが、
実行前の最終チェックの精度の向上が必須というべきなのでしょうかね?

そこの点での自分の認識違いがあるのかなと少し思いました。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-05-14 20:51
引用:

RUNさんの書き込み (2008-05-14 18:25) より:

その為に、Validatingと実行前チェックの2重チェックは不可欠と自分は言っています。



そう思いますね。

Windowsと言っても広範囲で、スマートクライアントの場合、
実際サーバーサイドでもチェックしているかと言えば
私が見た範囲では全くしていない。。。

(DataSetうのみ。。。鵜呑み。。)
どうなのて感じです!?
会議室デビュー日: 2006/06/02
投稿数: 19
お住まい・勤務地: 江戸
投稿日時: 2008-05-15 10:34
引用:

indigo-xさんの書き込み (2008-05-14 20:51) より:

Windowsと言っても広範囲で、スマートクライアントの場合、
実際サーバーサイドでもチェックしているかと言えば
私が見た範囲では全くしていない。。。

(DataSetうのみ。。。鵜呑み。。)
どうなのて感じです!?



どこまでセキュリティを要求されるシステムかにもよりますが、少なくとも悪意を持ったユーザーが触れる位置にあるシステムであれば、サーバー側でのチェックをしないのは非常に危険だと思います。

セキュリティという観点だけで言うなら、むしろクライアント側でのチェックなどどうでもよくて(セキュリティしか考えないならクライアント側でのチェックなんて必要ないです)、サーバー側でのチェックこそが肝要なのですけれどもね・・・。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-05-15 13:00
引用:

RUNさんの書き込み (2008-05-14 18:25) より:

個人的には2重チェックともに必須と考えていますが、
実行前の最終チェックの精度の向上が必須というべきなのでしょうかね?
そこの点での自分の認識違いがあるのかなと少し思いました。


精度の向上が必須というよりは、最終チェックが完璧であることが前提なので、二重チェックが現実的にまったく役に立っていないというつもりはないです。 単なる入力制限であればユーザビリティに特化していると考えていますが、Validation についてはチェックの概念も多く含みます。

途中での検証と最終チェックの内容が不一致で最終チェックの内容が欠落していることが実際にあったりします... いや、もちろんあってはならないことです。 ASP.NET の Validator コントロールみたいな概念が広まると嬉しいですね。 Windows アプリケーションの ValidationChildren メソッドはそのままでは非常に使いにくいものです。 だから漏れが生まれてしまうのですね。

Windows アプリケーションでの Validating イベントについてですが、私は最終チェックより前の段階でユーザーに一端通知する機能として使うのが適切ではないかと考えています。 そしてただ通知するだけで邪魔をしてはならないとも考えます。

このあたりは、burton999 さんがすでに仰っていますが、ツールチップなどのポップアップやバルーンでユーザーに通知して '入力の妨げをしない' あるいは 'フォーカスの移動を邪魔しない' という仕様が望ましいと最近思うようになりました。 入力した箇所が間違っているのは知っているのだけれども、一端それより前の項目に戻りたい場合に移動できなくなる Validating の実装は嫌うお客さんも増えてきました。(メインフレームではそうでもなかったのですけど、でもまあ我々にとっては嬉しい傾向ですね)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)