1

許可されていないユーザーがページにアクセスするのを制限し、そのユーザーをUtilities.aspxページにリダイレクトしようとしていDefault.aspxます。

if (authorizedUser.ToLower() != "admin")
{
    if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
    {
        ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "<script>alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.')</script>", true);
        Response.Redirect("Default.aspx");
    }
}

ただし、リダイレクトは正常に機能alertしていますが、ページに表示されません。この問題を検索すると、クライアント側のコードがまったくレンダリングされる前に、Response.Redirect がアクションを完了することがわかります。

alertの前に を表示するにはどうすればよいResponse.Redirectですか?


また、これら 2 つのアプローチをPage_Loadof で試しましたがDefault.aspx、どちらも機能しませんでした。特定のセッションバリアブルが設定されている場合、アラートを表示します。

if (Session["unauth"] != null)
{
    ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');", true);
}


if (Session["unauth"] != null)
{
    form1.Attributes.Add("OnLoad", "javascript:alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');");
}
4

8 に答える 8

3

Response.RedirectLocationページ上のコンテンツを表示する前にブラウザが表示して実行するヘッダーを設定しています。ページを実際に実行したい場合は、リダイレクトするだけでなく、最初にページにアクセスできるようにする必要があります。

例:

クライアントのリクエスト:

GET /Utilities.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*

サーバーの応答:

HTTP 300 OK
Location: /SomeNewPage.aspx      <-- Browser see this and goes
Content-Length: 12345

<html>                           <-- ignores from here down
  ...
  <script>alert('You\'re being redirected');</script>
  ...
</html>

クライアントの新しいリクエスト:

GET /SomeNewPage.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*
...
于 2013-06-13T12:37:20.113 に答える
3

できません。

リダイレクトは HTTP 機能です。リダイレクトを実行すると、ページが完全にスキップされます。

代わりに、より多くの Javascript を使用して、アラートの後にクライアント側のリダイレクトを実行できます。
具体的には、 を設定しlocation.hrefます。

于 2013-06-13T12:36:56.643 に答える
3

HTTP リダイレクト + JavaScript は使用できません。リダイレクトする前に警告メッセージを表示したい場合は、100% JavaScript ソリューションを使用する必要があります。これにより、そのページへの不正アクセスを簡単に引き起こす可能性のある大きなセキュリティ ホールが生成されます。

あなたができる最善のことは、ターゲットページに説明的なメッセージを表示することだと思います. これには、クエリ文字列パラメーターを送信できます。

于 2013-06-13T12:38:35.657 に答える
1

私はこれについて@ClaudioRediと一緒です。これを行う唯一の方法は、次の方法で JavaScript を使用することです。

  • JavaScript が有効になっていても、ブラウザーによってブロックされる可能性があります。
  • 確実にセキュリティホールを開けます。

私の提案は、ランディング ページを読み込んだ後にそのアラートを表示することです。

于 2013-06-13T12:40:34.487 に答える
0

使ってみて

ClientScript.RegisterStartupScript(Page.GetType(), "", script,true);

いいえ

this.GetType() 

しかし

Page.GetType()
于 2013-06-13T12:41:31.213 に答える
0

別のページへのクライアント側リダイレクトを使用する必要があります。

if (authorizedUser.ToLower() != "admin")
    {
        if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
        {
    ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.'); window.location.href = 'Default.aspx';", true);

       }
    }
于 2013-06-13T12:43:36.467 に答える
0

リダイレクトの代わりに、次のように試すことができます:-

 System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<script language='javascript'>");
                sb.Append("alert('hello');window.location.href=\"page2.aspx\"");
                sb.Append("</script>");

 ClientScript.RegisterStartupScript(typeof(Page), "anything", sb.ToString(), true);
于 2013-06-13T12:42:55.077 に答える