пытаясь обезопасить сайт, но при этом сохранить домашнюю (главную) страницу общедоступной MCV5 asp.net - PullRequest
0 голосов
/ 30 января 2019

У меня есть сайт с несколькими страницами, и я ввел логин и регистрацию.

затем я внедрил SSL и добавил перенаправления для всех, кто пытается получить доступ к сайту без HTTPS, с помощью следующего кода:

сначала я изменил проект, чтобы разрешить SSL HTTPS только в настройках проекта enter image description here

GLOBAL 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, но все равно отказывается)

1 Ответ

0 голосов
/ 15 февраля 2019

Я не уверен, что понимаю вопрос.Если вы авторизуете своих пользователей с помощью OWIN и Identity, то для защиты других ваших контроллеров вы должны использовать что-то вроде следующего:

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

return View();
}

У ваших публичных контроллеров не будет атрибута [Authorize] в заголовке.Кроме того, если вы хотите, чтобы ваш веб-сайт всегда был защищенным с помощью TLS 1.2, вы можете добавить следующую строку в метод Application_Start () в Global.asax.

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