试图保护网站但同时保持主页(索引)页面公共 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 身份的主要内容,如果未能解决你的问题,请参考以下文章