5

現在、IIS 6および7を使用しているシステムがあり、ASP.NETで記述されています。C#は.NET4で記述されています。

私の目的は、URLを完全に非表示にすることです(クライアントの要求に従って)。つまり 、 https ://myapp.it.mydomain.com/Secure/folder1/folder2/folder3/someView.aspxはhttps://myapp.it.mydomain.com/であるか、少なくとも不確定な変更されていないページである必要があります: https :/ /myapp.it.mydomain.com/constantView.aspx

現在、Response.Redirectすべてのナビゲーション項目と一部の直接リンクに使用しています。クエリ文字列の使用法もいくつかありますが、ページ間のポストバックに依存しています。URLマスキングの手段はありません。そのためのメカニズムを提供することを目指しています。

私はすでにURLマスキングを実行するためのいくつかの方法を知っていますが、最も簡単に実装できるソリューションについてSOの意見を求めています。

最も簡単なのは、実装する時間を指します。つまり、Server.Transferを排他的に使用するように呼び出しを変更することはできません。

ASP.NET Routing公正な解決策のように見えますが、私が理解しているように、必要な場所にマップするには、すべてのクエリ文字列で作業する必要があります。これにより、1対1のマッピングではなく、すべてのページを非表示にできるかどうかはわかりません。

フレームセット/iFrameを使用することも、既存のソリューションで多くの問題を引き起こすため、オプションではありません。

私が理解しているように、それURL Rewrite Moduleが私の最善の解決策かもしれません。

この質問が、おそらく解決策の良いリストにつながることを願っています。おそらく、私がまだ気付いていない方法です。


編集

現在の状況に関するより明確な質問:

IIS 6を使用しています(したがって、IIS 7リライトモジュールは問題外です)。Page.Referrer(ASP.NET内)とクエリ文字列を使用する既存のコードを壊さないURLクローキング/マスキングを提供する方法はありますか?

アイデアは、アドレスバーが常に同じように見えるようにすることです。JavaScriptのハックでも許容されます。

4

4 に答える 4

2

ここにあなたの目的のために可能なすべての解決策の優れた内訳があります: http ://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

しかし、あなたの要求に基づいて、私は個人的にURL書き換えが最善の策だと思います。なぜなら、web.configファイルに書き換えルールを追加するだけでよいので、最も簡単に実装できるソリューションです。IIS6の場合、私自身、過去にIntelligenciaUrlRewriter.NETを使用しました。

于 2012-05-24T12:02:36.070 に答える
1

少しわかりにくい...コメントを使うつもりだったが、この「コメント」の長さではうまくいかない...

私見では:

  • あなたがresponse.redirectそれが現在どのように要件を満たしているかを言っているなら、それは(推測して)言うようです、リダイレクトはいくつかのクエリ値に依存しています。もしそうなら、「非表示」は実際には機能しません-同じ結果ページ(?)に到達するために同じクエリを提供するだけです。

  • と同じserver.transferです-どのような場合でもその「繰り返し可能」です(したがって、URLが非表示になるはずだったものは、実際には非表示ではありません(質問の要点を完全に見逃していない限り)。

  • フレームセット/iframeなど-何も隠さないので、ソースページがどこにあるかを簡単に把握できます(IE / Chrome / Safari / FF開発者ツールなど)。

  • URLの再書き込み/ルーティング:URLを再書き込みまたはルーティングするには、(最初​​に)非表示になっているはずのものが(そもそも)表示されないように要求する必要があります。

  • クライアント(ブラウザまたはブラウザプラグイン)の要求は、いつでも検査/確認できます(セキュリティ対策がなければ、改ざんされる可能性があります)。

隠しておく必要があるのは何か、そしてその理由を説明したほうがいいかもしれません。URLは「何か」への単なるリソースです。したがって、実際にはURL自体ではなく、その「何か」を保護する必要があるようです(?)。あなたはより良い提案を得るかもしれません...

いくつかのアイデア(「簡単」は相対的です):

  • Webサービスとクライアント側のスクリプトを使用します。UIは完全にスクリプト(別名「1ページアプリケーション」)によって駆動されます。クライアントの要求が検査された場合でも、スプーフィング(「暫定プロキシ」など)によってエンドポイントの要件を満たすことができないように、適切と思われる方法でエンドポイントにセキュリティを追加できます。スクリプトはプロキシ、プロキシを呼び出します。サーバー側は、検証とリクエストパラメータを実行し、エンドポイントに実際のリクエストを送信します。リクエストはバックグラウンド(サーバー側)で行われるため、クライアントはエンドポイントを認識していません。したがって、エンドポイントを検査したり、表示したり、改ざんしたりすることはできません。これで、作業を行う別のWebアプリから完全に分離された基本的なHTML「フロントエンド」Webサイトができました。フロントエンドのWebサイトとそのURLのみが公開されています。

  • ASP.net Webフォームのポストバックとはまったく異なります(本当に考えれば)。単一ページ、UIはユーザーの操作に基づいて駆動されます-常に1つのURLのみが存在します。相互作用->処理。結果は、ユーザーの操作、特定の要件によって異なります。良い例は、ASP.NetWebフォームウィザードコントロールです。「ステップ」は異なるURLと同じではありません。上記のように、実際の処理は同じWebアプリまたは完全に別のWebアプリ(Webサービス)で実行できます。したがって、「フロントエンド」Webサイトを処理中のWebアプリから完全に分離することを考えることができます(前者のURLは公開されています)。

  • ASP.Net MVCと同じです。コントローラーは、相互作用や要求の制限(HttpPostのみなど)が与えられた場合に、レンダリングするビューを管理します。

それでも、上記のすべては、さらに多くのものを追加せずに「繰り返し不可能な」テストに合格しません。たとえば、RECATPCHAの時点で、すべてのユーザーに適切かどうかを自問する必要があります。ある時点で、それが「公開」されることを意図していない場合、認証が答えになります。

Hth..。


アップデート:

Meh-なぜ人々が反対票を投じ、何も言うことがないのか誰が知っているか:)

とにかく、実際に何が保護されているのかをよりよく理解することなくしてはなりません。URIを非表示にする必要がある場合は、2層構造((1)フロントエンド、(2)バックエンド)が個人的な選択です。これはおそらくWebサービスアーキテクチャを意味します。

私がこれを考えすぎていて、URLの「機密」名(実際にはプロセスではない)の問題である場合、DNSは簡単な解決策(CNAME)である可能性があります。

于 2012-05-15T14:36:15.790 に答える
1

Server.Transferは、同じURLを維持するための最良の方法ですが、あなたの場合、それはオプションではありません。もう1つの方法は、メインページに動的ユーザーコントロールをロードすることです。

動的なユーザーコントロールを使用すると、ページに表示する内容を制御できますが、これはあなたが持っているものに対する画期的なソリューションだと思います。URLの書き換えとルーティングでは、同じURLを維持できない異なるURLが使用されます。URLからページを入力したいと考えています。.netルーティングでは、URLは一意である必要があり、同じURLを持つ2つのルートは禁止されています。

現在実装されているものを操作したい場合、最良の解決策はURLリライトです。

于 2012-05-25T12:42:56.547 に答える
0

バージョンASP.NET3.5から利用可能なWebフォームおよびMVCルーティング機能に使用できます

ここにいくつかの例があります:

   Void RegisterRoutes(RouteCollection routes)
    {
          Routes.MapPageRoute(
                          “product-browse”,      // route name
                          “products/{category}”, // URL with params
                          “~/Products.apsx”      // Web forms page to handle it
                             );
    }

    Void Application_Start()
    {
        Registerroutes(RouteTable.Routes);
        RouteTable.Routes.MapPageRoute("Product", "Product/{Name}", "~/Product.aspx"
        // or simply
        routes.MapPageRoute("Customers", "Customers", "~/Customers.aspx");
        routes.MapPageRoute("CustomerDetails", "Customers/{CustomerId}", "~/CustomerDetails.aspx");

    }

// here how you can get url
string url =  Page.GetRouteUrl(“product-browse”, new { category = “software”});
string name = Page.RouteData.Values["name"].ToString();

// This some webform aspx syntax of use:
<asp:HyperLink ID="hyper" runat="server"NavigateUrl='<%# "Product/laptop"%>'  Text='<%# Bind("ProdctName") %>' ></asp:HyperLink>

<img src="<%= Page.ResolveUrl("Styles/Images/Product.jpg") %>" height="65px" width="65px" />

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
        <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="150" />
        <asp:HyperLinkField Text = "View" DataNavigateUrlFormatString = "~/Customers/{0}" DataNavigateUrlFields = "Id" />
    </Columns>
    </asp:GridView>

UrlRewriter.NETは使用しないでください。これは古い技術です。MVCはルーティング4.0も好みます

于 2019-03-19T11:47:50.657 に答える