web-dev-qa-db-ja.com

ドロップダウンリストに値を挿入することは可能ですか?

ASP.NETページ、またはそのことについての任意のhtmlページに、大量の価格のドロップダウンリストがあるとします。ページの投稿時に、コードは計算のためのドロップダウンリストの選択を調べます。サーバーがページが改ざんされたことをサーバーが知らなくても、誰かが値を変更してページを投稿することは可能ですか?

更新

ASP.NETは Page.EnableEventValidation Property を使用してこれからの保護を提供することを聞いています。これを有効にすると(デフォルトでは有効)、ASPコントロールの値を変更しようとすると、エラーが発生します。

ポストバックまたはコールバック引数が無効です。イベント検証は、構成で使用するか、ページで<%@ Page EnableEventValidation = "true"%>を使用して有効にします。セキュリティ上の理由から、この機能はポストバックイベントまたはコールバックイベントへの引数が、それらを最初にレンダリングしたサーバーコントロールから発信されていることを確認します。データが有効で予期されている場合は、ClientScriptManager.RegisterForEventValidationメソッドを使用して、ポストバックまたはコールバックデータを検証用に登録します。

17
drobison

ドロップダウンリストは、HTML/UI構造です。 HTTPにはそのような概念はありません。つまり、クライアントとサーバーが最終的に相互に通信する方法です。

そのため、はい、実際にはページである必要がないため、クライアントはページを変更できますが、これは絶対に必要なわけではありません。結局、クライアントは単にHTTPリクエストをサーバーに送り返すだけであり、それにはいくつかのデータが含まれており、そのデータはHTMLフォームに入力された値である場合もあれば、ユーザーの気まぐれで選択された任意の値である場合もあります。

一番下の行は、入力を信頼できないです。クライアントから送信されたものはすべて疑わしいものである必要があり、それが期待どおりであることを保証するものではなく、受け入れる前にサーバーで検証する必要があります。

32
Xander

単に、そうすることができます。ユーザーはHTMLをダウンロードし、コンテンツを変更し、変更されたコンテンツとともにを送信します。

DBに到達する前に、すべてのフォームデータを検証していることを確認してください。 Webフレームワークによっては、通常、オプションを指定したとおりに制限する方法があります。

9
baordog

Parosなどのクライアントにプロキシをインストールすると、ブラウザからの応答がサーバーに送信される前に非常に簡単にトラップして、値を編集できます。ドロップダウンフォーム要素から選択したオプションも含まれます。これがいかに簡単かがわかると、さまざまなプログラム的な方法でこれをどのように行うことができるかを簡単に想像できます-ブラウザーが危険にさらされた場合のブラウザーのアドオンを含みます。

これを防ぐ絶対に唯一の方法は、サーバーに到着したときに値が有効であることを確認することです。

これは、サーバーに送信されるすべてのデータ、フォームデータ、URL GETパスデータ、さらにはヘッダーにも当てはまります。

ブラウザ/クライアントベースのセキュリティは、まったくセキュリティではありません。

4

Google Chromeを使用している場合は、単に右クリックして要素を検査します。次に、特定の選択タグに移動し、右クリックして[HTMLとして編集]をクリックして、新しいオプションを追加します。

3
Vishal Chawla

データを応答に挿入することもできますが、サーバー側のコードが提供しているものを探していない場合は、その場所で注入が停止されます。サーバーサイドコードでの検証が最善です。

0
Malachi