【问题标题】:ASP.NET MVC 4 Make a page not directly reachableASP.NET MVC 4 使页面无法直接访问
【发布时间】:2013-03-28 09:32:48
【问题描述】:

我有一个已完成 90% 的 ASP.NET MVC 4 博客,但我需要一件事 - 我有一个网页,可以说是 index/secretPage,但我希望只有在我从另一个网页重定向后才能导航到此网页- 让我们说索引/重定向。如果地址是硬编码的,它不应该导航,如果访问者来自不同的链接,比如 blog/post/24,它也不应该导航。 我希望我的问题很清楚,而不是你的帮助。

【问题讨论】:

  • 检查 url referrer,如果它不是预期的页面,发出 404 或重定向到上一个?
  • 您可以使用Request.UrlReferrer 来获取用户以前来自的网址,如果不是index/redirect 或其他什么,那么您可以执行Response.StatusCode = 404, Response.Status = "404 Not Found"Response.Redirect("...."); 之类的操作
  • @RobIII Erm.. 问题被标记为asp.net...
  • @RobIII 他显然是在回应你关于我的评论的小长篇大论,澄清他确实了解推荐人是什么。然后你继续声明I gathered that georgi-it didn't understand the referer/redirect concepts so I pointed him in the right direction before he/she started looking in the wrong place。你的阅读理解可能需要一点工作..
  • @RobIII 对不起,下次我会说:我知道什么是 HTTP Referer,我知道什么是 HTML,我也熟悉我的电脑电源,请告诉我其他我不知道的事情提到。我认为我的问题很清楚,从它被标记为 asp.net 开始,也许现在这种争论将停止。

标签: c# asp.net asp.net-mvc


【解决方案1】:

如果直接调用,您还可以使用显示另一个页面的操作来掩盖秘密页面。

在此示例中,有 2 个操作。返回虚假视图的“秘密”和真实调用的“检查”。在此操作中,布尔变量“allowSecret”被检查,然后用户看到视图“secret.cshtml”(如果允许)或“index.cshtml”(如果不允许)。

以下是具有该功能的简单控制器的示例代码:

using System.Web.Mvc;

namespace Test.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View("Index");
        } 

        public ActionResult Check()
        {
            // check if user is allowed to show secret page
            if(allowSecret == true)    
                return View("Secret");
            // Otherwise return view 'index.cshtml' 
            return View();
        }

        public ActionResult Secret()
        {
            // Always shows view 'index.cshtml' if url is ".../secret"
            return View("Index");
        }        
    }
}

您还可以在检查失败后重定向到另一个操作,而不是调用“假视图”:

return RedirectToAction("Index")

区别在于用户在浏览器中看到的 url。返回视图不会更改 url,重定向到另一个操作会将 url 更改为更改后的路由。

当然,您可以将检查放在控制器后面的另一个类中。

另一种选择是使用 'NonAction' 属性

[NonAction]
public ActionResult Check()
{
   ...
}

希望对您有所帮助,

DD

【讨论】:

    【解决方案2】:

    您可以UrlReferrer 了解谁引用了当前页面并抛出异常或重定向回来

    HttpContext.Current.Request.UrlReferrer
    

    http://msdn.microsoft.com/en-IN/library/system.web.httprequest.urlreferrer.aspx

    但无论出于何种原因,您都需要这个。在我看来,这不是一个好的设计。

    希望对你有帮助

    【讨论】:

    • 虽然从技术上讲是您所问问题的正确答案,但请记住,这根本不安全。您真正想要做的是使用某种形式的身份验证。
    • 强调这一点:像我mentioned earlier 一样,依赖推荐人是安全的。对我来说,它也闻起来像“不太好”的设计。
    • 我完全知道这一点,谢谢您指出
    • @RobIII 这不会保护我的 TopSecretAwesome 管理页面,这是为了不同的东西,与网站安全无关
    • 太好了,很高兴它帮助了你:))
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2019-07-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多