ビルドしているASP.NET MVC Webサイトには、管理者がビューの下でファイルシステムにcshtmlファイルを手動で作成できる必要があるという要件がありますもちろん、コントローラの操作でそのページにアクセスすることができます。 (すなわち、その後/Content/Test
を経由してアクセスし、Test.cshtml
というファイルを作成します)ASP.NET MVCのビューを動的にレンダリングする際のセキュリティの影響
私は、次のアプローチを経由して、これをやった:
まず、カスタムルートの設定:
routes.MapRoute(
name: "StandardContent", // my controller
url: "Content/{pageName}",
defaults: new {controller = "Content", action = "Render", pageName = UrlParameter.Optional}
);
そして、コントローラのアクションビュー名をパラメータとして取得し、要求されたビュー名が存在するかどうかをチェックしてビューをレンダリングします。
public ActionResult Render(string pageName)
{
if (pageName.IsNullOrEmpty())
{
return RedirectToAction("Index", "Home");
}
// if no view exists with this name, go 404
if (!this.ViewExists(pageName)) // my extension method for view checking
{
return RedirectToAction("NotFound", "Error");
}
return View(pageName);
}
私はそれがセキュリティの意味を除いて満足しています。ここで私は基本的には何でも生の入力ユーザーがURLに書き込み、その入力にビューが存在するかどうかをチェックしています。ユーザは通常、という悪質なパラメータを書いて、通常は制限付きアクセス(例:接続文字列ファイル)になるファイルにアクセスできる可能性がありますか?もしそうなら、私はそれをどのように防ぐべきですか?それは場合に役立ちます。ここ
は、拡張メソッドthis.ViewExists(pageName)
ためのコードです。
public static bool ViewExists(this Controller controller, string viewName)
{
var result = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
return result.View != null;
}
美しくて素敵で、ありがとう! :) –