gpt4 book ai didi

security - 试图保护网站,但也保持主页(索引)页面公共(public) MCV5 asp.net 身份

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:12 24 4
gpt4 key购买 nike

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

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

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

全局 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 代码但仍然被拒绝)

最佳答案

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

[Authorize]
public ActionResult YourSecuredController()
{
if (Session["userid"] != null)
{
ViewBag.UserName = Session["username"].ToString();
return View();
}

return View();
}

您的公共(public) Controller 不会在 header 中具有 [Authorize] 属性。此外,如果您希望您的网站始终使用 TLS 1.2 确保安全,那么您可以将以下行添加到 Global.asax 中的 Application_Start() 方法。

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

关于security - 试图保护网站,但也保持主页(索引)页面公共(public) MCV5 asp.net 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com