認証を回避しながら、セキュリティで保護されたページ上のasp.netコントロールから安全でないポストバック

StackOverflow https://stackoverflow.com/questions/201796

  •  03-07-2019
  •  | 
  •  

質問

標準のasp.netフォーム認証を使用しています。特定のページでは、ユーザーがログインする必要があります。これらのページの少なくとも一部はhttpsによって配信されます。各ページの上部に検索コントロールがあります。これを使用すると、現在のページにログインが必要な場合でも、ユーザーのセッションが期限切れになっているかどうかは気にしません。

ただし、現在、組み込みフォーム認証は、検索を実行するときに、投稿先のページに認証が必要であることを確認し、ユーザーをログインページにリダイレクトします。検索結果ページではなく前のページをリファラーとして使用します。

ここでセキュリティをバイパスする最良の方法は何ですか? PostBackUrlプロパティを使用して別のページに投稿することを検討しましたが、これがhttpsでない場合は、「安全でない接続にデータを投稿しています」というメッセージが表示されます。ユーザーが気に入らないメッセージ。

ご協力ありがとうございます。

編集:検索ページでGETを使用することを提案してくれたニックに感謝します。既にこれを行っていますが、クエリ文字列は検索入力コントロールによって構築され、リダイレクトされます。ポストバックを使用せずにクエリ文字列を作成するにはどうすればよいですか? (明らかに、javascriptはオプションですが、別のメカニズムを見つけたいと思っていました。)

役に立ちましたか?

解決 3

他の回答で示唆されているように、これを行う最も正しい方法は、getのメソッドとsearchresults.aspxのアクションを持つ別のフォームで検索入力コントロールを持つことです。ただし、ページ上にサーバー側フォームは1つしか持てないため、aspxではこれは困難です。

最終的に、私がたどり着いた解決策は非常にうまくいきましたが、「検索」がボタンがクリックされ(そのIDを持つパラメーターが存在するかどうかを確認することで)、条件パラメーターを検索してクエリ文字列を作成し、検索結果ページにリダイレクトしました。これは、トリガーされる前に(セキュリティ保護されていない)検索結果ページへのリダイレクトを既に呼び出しているため、すべての認証/承認モジュールがバイパスされることを意味します。

ややもろいですが、私たちにとっては非常にうまく機能します。

他のヒント

検索ページでは、GETリクエストを介して検索が行われていることを確認します。 (つまり、クエリ文字列に" q"を含むgoogleのような)POSTを実行している可能性があります。

だからあなたの変更

<form method="post" ...>

to

<form method="get" ...>

ほとんどの開発者が検索ページで犯す最大の間違いは、ポストバックを行うことです。 HTTPは、クエリ文字列(名前)を介してクエリまたは検索を実行し、本文ではなくクエリ文字列に投稿するフォームを取得するために設計されています&quot; GET&quot;方法。これにより、どの検索デバイスでも、ブラウザの検索ボックスも含めて検索ページを使用できます。

次に、特別な場所の構成を作成します検索ページ。これをweb.configに追加します。

<location path="my-search-page.aspx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

これにより、その1つのページに特別なオーバーライドが作成され、locationタグ内のすべてがまったく同じweb.config構造を使用してweb.configをオーバーライドします。

すべてのユーザーに許可するページごとにこれを繰り返します。

検索結果ページがポストバックを実行している場合、検索ボタンがクリックされる前にpageloadイベントが発生します。

したがって、ページが存在する場合、検索ボタンをクリックしてイベントをログイン画面に戻す前に、ログインコマンドが実行されるログインが必要です。

検索を通常のhtml形式にし、POSTではなくGETを実行し、&quot; Nick&quot;が言及するいくつかの方法があります

ページ全体が.netポストバックフォーム内にある場合は、最初に起動するようにページロードのオーバーロードに検索ボタンイベントを追加する必要があります。

このサイトのページには、cycleやそのオーバーライドなどの良い記事があります。 http://www.15seconds.com/issue/020102.htm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top