IIS обслуживает сайт только при наличии файла cookie

У меня есть веб-сайт, к которому я не хочу, чтобы кто-либо мог получить доступ, ЕСЛИ ТОЛЬКО... у них нет действительного файла cookie HttpOnly в их браузере.

Таким образом, пользователь входит в систему по адресу www.domain.com, и в его браузере установлен файл cookie httponly. Затем они перенаправляются на dashboard.domain.com, который должен показать им личные вещи!

Но если кто-то пойдет прямо на dashboard.domain.com без предварительного входа в систему, то в их запросе не будет файла cookie, и я хочу, чтобы IIS перенаправлял их на сайт www.

Как я могу попросить IIS проверить, существует ли файл cookie (значение не имеет значения, он должен просто существовать) перед обслуживанием веб-сайта? Может ли IIS сделать это?

Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Поддержка IIS для PHP
Поддержка IIS для PHP
Эта версия PHP требует наличия C++ Redistributable для VS 2019 (как минимум)
0
0
606
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать модуль перенаправления IIS. Если файл cookie существует, он будет перенаправлен на dashboard.domain.com. Вот пример, который вы можете использовать в качестве справки.

Если имя файла cookie _xx и значение HCjdskfds==, то ваше правило должно быть таким:

<rule name = "redirect based on cookie" stopProcessing = "true">
<match url = ".*" />
<conditions>
    <add input = "{HTTP_COOKIE}" pattern = "_xx=HCjdskfds= = " />
    <add input = "{HTTP_HOST}" pattern = "www.domain.com" />
</conditions>
<action type = "Redirect" url = "http://dashboard.domain.com" />

Похоже, что это правило выполняет перенаправление, если файл cookie ДЕЙСТВИТЕЛЬНО существует, но я хочу обратного. Если вы попытаетесь получить доступ к сайту А без файла cookie, вы будете перенаправлены для входа на сайт Б.

TJBlackman 05.01.2021 15:16

Вы можете попробовать установить для HTTP_COOKIE значение null.

samwu 06.01.2021 10:01
Ответ принят как подходящий

Цель: перенаправить пользователя, если файл cookie НЕ присутствует в его запросе.

Решение:

  • Добавить в web.config для IIS в корне проекта
  • Предполагается, что cookie — это CookieName=some_value
  • Шаблон сопоставления использует регулярное выражение для проверки имени файла cookie с любым значением
  • Свойство negate инвертирует условие, аналогично оператору NOT.
  • redirectType = "Found" является необязательным и равен 302. По умолчанию 301.
<configuration>
  <system.webServer>
    <rewrite>
      <rules>

        <rule name = "Redirect if Cookie is NOT present" stopProcessing = "true">
          <match url = ".*" />
          <conditions>
            <add input = "{HTTP_COOKIE}" pattern = "CookieName=*" negate = "true"/>
          </conditions>
          <action type = "Redirect" url = "https://www.my-domain.com" redirectType = "Found"/>
        </rule>

      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Это правило представляет собой подстановочный знак для файла cookie с CookieName, поэтому, если файл cookie с таким именем вообще имеет какое-либо значение, это правило не вступит в силу. Но если файл cookie не существует, вы будете перенаправлены на другой URL-адрес.

Одно предостережение заключается в том, что нет способа идентифицировать файл cookie HttpOnly по сравнению с файлом cookie, установленным в браузере... :(

Источники:

Другие вопросы по теме