1

QueryStrings を使用する際の脆弱性と攻撃の可能性について、多くの声を聞きました。それとは別に、昨日、エラーが私を非常にいらいらさせたので、QueryStringsの使用をやめることにしました。私は次のようなものを渡していました:

Dim url As String = "pageName.aspx?type=3&st=34&am=87&m=9"

私がしようとしました

Response.Write(url) 

リダイレクトページで「タイプ」を3として出力し、ターゲットページで試してみると、3,0が出力されました....これは簡単に処理できることはわかっていますが、なぜですか? つまり、3 を渡して、次のページの読み込みで 3.0 をチェックして、それに応じてアクションを実行する必要があるのはなぜですか???

では、何を使用すればよいでしょうか。変数、パラメータなどを次のページに渡す最も安全な方法は何ですか?

4

8 に答える 8

2

Cross-Page Postbacksを使用できます。

この記事もチェックしてください:

于 2009-02-28T07:45:13.320 に答える
2

使用できるオプションは多数ありますが、ほとんどの場合、ページ間で変数を渡す方法を構築する必要があります。

この戦略を使用するほとんどのプロジェクトでは、formVariables クラスを作成して、現在アクティブなアイテムを保持します。クエリ文字列で渡す必要があるプロパティがあります。このクラスをセッションに保存します。私のベースページでは、セッションからそれを読みました。したがって、すべてのページで、このオブジェクトの値を取得します。この方法の唯一のマイナス点は、作業が終了したときにアイテムをクリーンアップすることです..

お役に立てれば。

于 2009-02-28T07:47:09.447 に答える
2

セッションを使用してページ間で変数を渡すことは避けることをお勧めします。これは、Web のステートレス モデルを壊すためです。特定のページに関連するいくつかの値をセッションに保存したばかりの場合、ユーザーはブラウザの戻るボタンを使用して同じページに戻りますが、状態が異なる場合は、それについて知ることはできません。

これにより、ユーザーが現在表示しているページに関係のないセッション値が読み取られる可能性が生じ、エンド ユーザーが非常に混乱する可能性があります。また、セッションの有効期限に依存しすぎると、セッションの有効期限の問題が発生します。

個人的には、非表示のフォーム値 + ポストバック + ナビゲーションで読み取ることができるクエリ文字列を優先して、可能な限りセッションの使用を避けようとしています。

于 2010-08-17T15:10:31.057 に答える
1

ページ間で情報を渡すための最良/最も安全な方法は、セッションを使用することです。

// On page 1:
this.Session["type"] = 3;

// On Page 2:
int type = (int)this.Session["type"];

セッションには任意の種類のオブジェクトを格納でき、サーバー側に格納されるため、ユーザーはクエリ文字列、ビューステート、または非表示フィールドのようにオブジェクトを操作できません。

于 2009-02-28T21:45:12.537 に答える
0

ページの読み込みごとに適切なセキュリティ チェックを行うと、クエリ文字列は問題なく、最も柔軟な IMHO になります。

ページへのエントリ ポイントが他のオプションのように送信者に依存しないため、最も柔軟性が高くなります。独自のアプリ内の任意の場所から、または必要に応じてクエリ文字列を介して外部からページを呼び出すことができます。また、ブックマークを付けて、テストや直接操作のために手動で変更することもできます。

ここでも重要なのは、クエリ文字列に適切なセキュリティと検証を追加することであり、やみくもに処理することではありません。データとユーザーによっては、データが所有されていて特定のユーザーに非公開である場合、データとユーザーによっては、データへのアクセス権がまったくない場合があります。

クエリ文字列を非表示にするためにさまざまな方法を試しましたが、実行、デバッグ、および管理が簡単であるため、最終的にはクエリ文字列に戻りました。

于 2009-02-28T11:19:21.853 に答える
0

ユーザーが一般的な検索などをブックマークできるようにするため、クエリ文字列を使用するのが好きです。たとえば、ページがスタンドアロンで動作できる場合、スタンドアロンで動作できるようにしたいと考えています。

セッション/クロスページ ポストバックの使用は、意味をなすために別のページから移動する必要がある場合に便利ですが、それ以外の場合は、通常、クエリ文字列の方が優れたソリューションであることがわかります。

クエリ文字列は検証されていない入力であり、検証されていない入力と同じように注意して扱ってください。

于 2009-02-28T11:25:45.223 に答える
0

まず、asp .net では、いくつかの戦略を使用してページ間で値を渡すことができます。ビューステートもありますが、ビューステートは値を保存し、使用はさまざまなシナリオで行われますが、それも使用できます。代わりにセッション、そしてもちろんフォームに投稿してください。

問題がセキュリティである場合は、データにアクセスするためのユーザーを 2 つ作成することをお勧めします。読み取り専用アクセス権を持つ 1 人のユーザー。これは、ページにアクセスし ( Sql Inyection prevent )、クエリ文字列をスローするデータを検証するためです。プライベート ゾーンへの書き込みアクセス権を持つもの。

読みにくい英語で申し訳ありません。

于 2009-02-28T10:18:55.837 に答える