0

これは、十分な回答だと思っていた他の質問に戻りますが、よく考えてみると、それがそうであったかどうかわかりません(申し訳ありません)。

バックグラウンダー:

  1. フォームを動的に生成しています。データベースからコントロールを取得しています。

  2. 各コントロールを、ユーザーのセッション ID ではないデータベース ID に関連付ける必要があります。私は現在、自分のIDをWebコントロールのIDに他のものと一緒に保存して、自分がしていることを一意/明確にすることでこれを行っています。

  3. ポストバックで、Web ページのすべてのコントロールを反復処理して、特別な識別子、つまり MyGeneratedTextBox_ID_Unique をチェックします。このプロセスにより、コントロールが私が生成したものであることを識別し、この入力フィールドの ID を取得するという 2 つの重要なステップが可能になります。

そして、これはすべて機能しますが、それでもセキュリティが心配です。この場合、実際のデータベース ID を表示してもセキュリティ上の問題は見られませんが、望ましくないことに同意します。ただし、次の可能性が懸念されます。

  1. ユーザーが悪意のあるコントロールを私のコレクションに追加し、それを SQL インジェクション攻撃に使用できる場合。

  2. よりアカデミックですが、ユーザーが何らかの方法でフィールドのデータを保存できる場合、ID を変更してもアクセスできません。

これは、それを行う方法の「ハック」であることに同意します。しかし、私の質問は、それはセキュリティ上のリスクであり、ハッキングの少ない方法でそれを行う「簡単な」方法はありますか?

ページで作成/インスタンス化されたコントロールのみがコントロール リストに追加されると仮定します。したがって、すべてのコントロールをサーバー側で作成する必要があるため、セキュリティの問題は解決されますが、検証したいだけです。再度、感謝します。

PS: コントロールごとにプロパティを追加し、viewstate を暗号化すると、もう少し安全になることがわかりました。

4

4 に答える 4

1

ASP.NET 2.0 セキュリティの元のガイドラインでは、ブラウザから返されるすべての入力に対して入力検証を実行する必要があると具体的に述べています。誰かが別のデータをサーバー側のコードにポストバックするのを妨げるものは何もありません。ASP.NET には最小限の要求検証が組み込まれていますが、それに依存しないように明確に述べられています。

データの整合性のために、コントロールからポストバックされている個々の入力を常に検証する必要があります。すべての入力は、攻撃ベクトルを示す可能性のある不要な特殊文字とパターンを削除することにより、SQL インジェクション攻撃に対してサニタイズする必要があります。データが適切であることを示すコントロールからの識別子だけに依存している場合は、検証ロジックに大きな穴があります。

入力の形式が適切であり、問​​題のあるデータが含まれていないことを検証するために、各入力に対してサーバー側の検証を実行する必要があります。

http://msdn.microsoft.com/en-us/library/ms998258.aspx

于 2010-04-23T20:43:08.833 に答える
1

ページで作成/インスタンス化されたコントロールのみがコントロールリストに追加されると想定しています..したがって、すべてのコントロールをサーバー側で作成する必要があるため、セキュリティの問題は解決されますが、検証したいだけです。再度、感謝します。

を使用してサーバー上で「ライブ」を作成するコントロールrunat="server"。コントロール コレクションで特別な ID を確認する必要はありません。Harv が言ったように、コントロールからのすべての入力を検証する必要があります。

Web サーバーが危険にさらされていない限り、誰もページにサーバー コントロールを追加できません。

于 2010-04-23T22:06:15.337 に答える
0

これが唯一の方法だと思うので、質問に答えようと思います。

サーバー側のコントロールが作成される唯一の方法はサーバー上であるため、設定したIDもそれらにあると信頼できます。これが、ページをインスタンス化するたびにコントロールを作成する必要がある理由の 1 つです。フォームから送信されたデータを信頼することはできませんが、コントロールと ID はサーバー側で生成されるため安全です。同様に、HTML を編集してサーバー側のコントロールを生成することはできません。

したがって、私の方法は、エレガントではありませんが、比較的安全です。唯一のセキュリティ上の欠陥は、明らかにされた ID です。

于 2010-04-23T21:47:27.550 に答える
0

ご自身の回答は間違っていないと思います。しかし、まだ少し混乱しているように感じます (コントロールの作成/インスタンス化/定義と ViewState/状態管理の復元)。

おそらく、次の 2 つの情報が問題を解決するのに役立ちます。

ASP.NET (および ViewState) を使用しているすべての人に、2 番目の記事を強くお勧めします

于 2010-04-23T22:24:25.763 に答える