【问题标题】:IIS only serve site if cookie existsIIS 仅在 cookie 存在时为站点提供服务
【发布时间】:2021-04-02 23:53:02
【问题描述】:

我有一个网站,我不希望任何人能够访问,除非……他们的浏览器中有一个有效的 HttpOnly cookie。

所以用户在www.domain.com 登录并在他们的浏览器中设置了一个httponly cookie。然后他们会被重定向到dashboard.domain.com,这应该会显示他们的私人资料!

但如果有人在没有先登录的情况下直接访问dashboard.domain.com,那么他们的请求中不会有 cookie,我希望 IIS 将他们重定向到 www 站点。

在为网站提供服务之前,我如何要求 IIS 检查 cookie 是否存在(值无关紧要,它应该存在)? IIS 甚至可以做到这一点吗?

【问题讨论】:

    标签: iis cookies


    【解决方案1】:

    目标:如果用户的请求中不存在 cookie,则重定向用户。

    解决方案:

    • 添加到项目根目录下 IIS 的 web.config
    • 假设 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>
    

    此规则基本上是带有CookieName 的cookie 的通配符,因此如果具有该名称的cookie 有任何值,则此规则不会生效。但如果 cookie 不存在,您将被重定向到另一个 URL。

    需要注意的是,无法识别 HttpOnly cookie 还是浏览器设置的 cookie...:(

    来源:

    【讨论】:

      【解决方案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 的情况下访问站点 A,您将被重定向到站点 B 的登录。
      • 您可以尝试将HTTP_COOKIE设置为null。
      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2012-06-09
      相关资源
      最近更新 更多