У меня есть веб-сайт, к которому я не хочу, чтобы кто-либо мог получить доступ, ЕСЛИ ТОЛЬКО... у них нет действительного файла cookie HttpOnly в их браузере.
Таким образом, пользователь входит в систему по адресу www.domain.com
, и в его браузере установлен файл cookie httponly. Затем они перенаправляются на dashboard.domain.com
, который должен показать им личные вещи!
Но если кто-то пойдет прямо на dashboard.domain.com
без предварительного входа в систему, то в их запросе не будет файла cookie, и я хочу, чтобы IIS перенаправлял их на сайт www
.
Как я могу попросить IIS проверить, существует ли файл cookie (значение не имеет значения, он должен просто существовать) перед обслуживанием веб-сайта? Может ли IIS сделать это?
Вы можете использовать модуль перенаправления 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" />
Вы можете попробовать установить для HTTP_COOKIE значение null.
Цель: перенаправить пользователя, если файл cookie НЕ присутствует в его запросе.
Решение:
CookieName=some_value
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, установленным в браузере... :(
Источники:
Похоже, что это правило выполняет перенаправление, если файл cookie ДЕЙСТВИТЕЛЬНО существует, но я хочу обратного. Если вы попытаетесь получить доступ к сайту А без файла cookie, вы будете перенаправлены для входа на сайт Б.