试图保护网站但同时保持主页(索引)页面公共 MCV5 asp.net 身份

Posted

技术标签:

【中文标题】试图保护网站但同时保持主页(索引)页面公共 MCV5 asp.net 身份【英文标题】:trying to secure website but also keep Home (index) page public MCV5 asp.net identity 【发布时间】:2019-06-24 04:43:21 【问题描述】:

我有一个只有几页的网站,我实现了登录和注册。

然后我实现了 SSL 并为任何试图在没有 HTTPS 的情况下使用以下代码访问该站点的人添加了重定向:

首先我将项目更改为仅在项目设置中允许 SSL HTTPS

全球ASAX

  protected void Application_BeginRequest(Object sender, EventArgs e)
    
        switch (Request.Url.Scheme)
        
            case "https":
                Response.AddHeader("Strict-Transport-Security", "max-age=300");
                break;
            case "http":
                var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
                Response.Status = "301 Moved Permanently";
                Response.AddHeader("Location", path);
                break;
        
    

web.config

<rewrite>
  <rules>
    <rule name="HTTP to HTTPS redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="HTTPS" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://HTTP_HOST/R:1"
          redirectType="Permanent" />
    </rule>
  </rules>
  <outboundRules>
    <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
      <match serverVariable="RESPONSE_Strict_Transport_Security"
          pattern=".*" />
      <conditions>
        <add input="HTTPS" pattern="on" ignoreCase="true" />
      </conditions>
      <action type="Rewrite" value="max-age=31536000" />
    </rule>
  </outboundRules>
</rewrite>

当我第一次运行项目时,IIS 安装了一个证书,它警告我我也将被允许访问此站点,因此当我运行项目时,chrome(默认浏览器)始终可以访问该站点,无论 url 看起来如何. (第一期)

我正在尝试从 IE 或 Firefox 和 IE 访问该站点以进行测试,如果我使用 https,我将永远无法访问索引页面,当然,它会访问该页面,但我没有登录,所以我看到了作为一个问题...我添加了

    [AllowAnonymous]
    public ActionResult Index()
    
        if (Session["userid"] != null)
        
            ViewBag.UserName = Session["username"].ToString();
            return View();
        

        return View();
    

我仍然无法访问该网站。我对安全很陌生,请多多包涵。我想要的行为是网站是安全的,但用户可以点击索引和注册登录等....但是当他们尝试点击其他需要登录的页面时被拒绝。

总结 Chrome:总是有效(我认为这是一个问题)

IE/FF:

当使用 https 时(我认为这是一个问题,因为我没有登录(当匿名被删除时)。 如果我使用常规 URL http://localhost:50499,页面将不会加载,但如果我添加 allowannonymos,它应该可以工作,但事实并非如此。 (如果我附加调试器,它永远不会命中 asax 代码但仍然被拒绝)

【问题讨论】:

在更改站点以支持 SSL 之前授权是否有效,即,如果用户未登录,是否会将用户重定向到登录页面? 【参考方案1】:

我不确定我是否理解这个问题。如果您使用 OWIN 和 Identity 授权您的用户,那么为了保护您的其他控制器,您将使用类似以下的内容

[Authorize]
public ActionResult YourSecuredController()

if (Session["userid"] != null)

    ViewBag.UserName = Session["username"].ToString();
    return View();


return View();

您的公共控制器不会在标头中包含 [Authorize] 属性。 此外,如果您希望您的网站始终使用 TLS 1.2 保持安全,那么您可以将以下行添加到 Global.asax 中的 Application_Start() 方法中。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

【讨论】:

是的,我了解授权属性,但我希望为整个站点增加安全性,并且只需要允许公众访问主页。这样我就不必继续添加[授权]。我根本不懂安全,所以我可能做错了什么。 所以让我添加信息并解释一下。我认为通过将站点更改为 SSL,它只会允许人们通过安全连接访问该站点,从而保护该站点。我的下一个想法是让公众进入索引页面并登录。从而建立安全连接,我们就完成了。我做错了吗? 您只需要授权需要它的页面。例如更新您的个人数据、检查订单状态等。https 连接仅确保当他/她编辑他/她的个人信息或查看订单状态时,没有人可以看到您的用户的信息,而信息在网络服务器和浏览器之间传输.一般来说,让您的整个网站 https 并仅授权需要它并提供个人信息的页面是一种很好的做法。 另一方面,就在昨天,我们交付了一个私人公司网站。只有员工可以使用该网站。所以第一个屏幕是登录屏幕,所有页面都有授权以防止未经授权的访问。整个网站也是https来加密网络服务器和浏览器之间的所有流量。 此链接说明了如何授权整个站点,而无需将 Authorize 添加到每个控制器。 ***.com/questions/4092803/…

以上是关于试图保护网站但同时保持主页(索引)页面公共 MCV5 asp.net 身份的主要内容,如果未能解决你的问题,请参考以下文章

动态更改主页按钮链接

从另一个页面访问时引导滚动间谍

Nginx - 密码保护整个网站,但保持一个文件夹打开

有没有办法确保继承的成员在派生类中不可访问,同时仍然保持公共继承的好处?

将 .asp 页面重定向到我的新站点的主页

尽管页面刷新,如何保持计数器倒计时?