0

ここでの用語がよくわからないので、ユーザー入力を「確認する」と言うときは、インジェクション攻撃を防ぐのではなく、2021 年 2 月 30 日を誕生日と主張するユーザーに注意することを意味することを明記しておきます。

これを正しく行うためのガイド、または人々が間違っている一般的な方法のリストはありますか? 入力前であっても正しい入力を確保するための戦略 (たとえば、テキスト フィールドに入力する代わりにカレンダーから選択する)?

言語固有の回答 (ASP.NET Validation Controls など) ではなく、一般的な戦略と原則に関心があることに注意してください。

4

3 に答える 3

0

「戦略」と呼ばれるデザインパターンを使用することをお勧めします。これは、「4人のギャング」または略して「gof」によって作成されたパターンの1つです。「制御の反転」や「依存性注入」など、聞いたことがあるかもしれないこのパターンのコピーやバリエーションがいくつかあります。

とにかく、オブジェクト指向言語の場合は、「validate」というメソッドでデータを検証する「validator」というクラスを作成します。検証に関連する形式の入力を受け入れるようにするか、データをオーバーロードして、さまざまな種類のデータに対してさまざまなメソッドを使用する必要があります。または、何らかの形のジェネリックにアクセスできる場合は、それを使用できます。

次に、このクラスのコンストラクターは、引数として「validatorstrategy」オブジェクトを取る必要があります。次に、実際の検証が戦略オブジェクトを通過します。

これをさらに進めるために、独自のタイプ名で入力フィールドを指定する、ある種の入力フォームジェネレータシステムを作成できます。これらは、フロントエンド言語(html / android xml / java swing)に応じて異なる入力フィールドを生成し、入力の検証方法にも影響します。

うーん..検証するためにまったく同じ内容を持つ必要がある2つのパスワード入力フィールドの問題を解決する方法を知りたいです。これはフォーム生成システムでどのように見えますか?おそらく、入力を表示せず、検証も行わない1つの入力フィールドを生成する「password」という名前の入力タイプと、入力を表示しない2つの入力フィールドを生成する「passwordsetter」という名前の別のタイプがあります。 2つのフィールドのデータを比較する検証戦略があります。その検証戦略を作成することは、D:

于 2011-03-03T22:25:04.807 に答える
0

入力フィールドを自由にすればするほど、より多くのチェックが必要になります。一部の言語では、テキスト フィールドが有効な日付であることを簡単に確認できる場合があります。他の人はそうではないかもしれません。

繰り返しになりますが、生年月日を入力するためにカレンダー コントロールまたは 3 つのドロップダウンをクリックするのを嫌がるユーザーもいます。単純に入力することを好むかもしれません。それはトレードオフです。

于 2011-03-03T22:00:12.720 に答える
0

あなたが探している用語はinput validationです。

ご指摘のとおり、無効なデータを入力できないコントロールを使用すると、クライアントを助けることができますが、サーバーに適切な検証を実装する必要があります。

つまり、インジェクション攻撃を防ぐのではなく、2021 年 2 月 30 日を誕生日と主張するユーザーに気をつけてください。

なぜ両方をしないのですか?自分自身をインジェクション攻撃にさらしたい特定の理由はありますか?

ユーザーが自分で入力した文字列か、ページに配置したコントロールによって送信された文字列をサーバーに送信するとします。最初の部分は、文字列を型付きデータに解析するためのライブラリ関数を見つけることです。あなたの例ではDateTime.TryParse、文字列を日付に解析するために使用できます。指定された日付が無効であるため、指定された例ではこれは失敗します。解析しようとしているライブラリ関数が見つからない場合は、自分でパーサーを作成してみてください。単純な検証の場合、正規表現として表現できる場合があります。より複雑な入力の場合、検証を実行するコードを作成する必要がある場合があります。入力言語が特に複雑な場合は、おそらくパーサー ライブラリを使用して支援することもできます。

2 番目の部分は、ニーズに固有のビジネス検証ルールを実装することです。たとえば、生年月日は過去の日付である必要があることがわかっていますが、過去に過ぎてはいけませ。あなたのサイトを使用している人が 100 歳である可能性はありえないわけではないため、これにはある程度の判断が必要になります。

于 2011-03-03T21:56:05.000 に答える