使用IIS重写将HttpOnly标志添加到Cookie不起作用

时间:2014-09-04 23:28:15

标签: iis cookies rewrite httponly

我找到了许多将HttpOnly添加到我的cookie中的例子,但它对我不起作用,我不知道为什么。我发现的所有例子都是一样的,我从我找到的一个帖子中复制了这个例子。我在IIS 7.0下使用.NET 3.5。希望有人可以告诉我我做错了什么?感谢

<rewrite>
  <outboundRules>
    <rule name="Add HttpOnly" preCondition="No HttpOnly">
      <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
      <action type="Rewrite" value="{R:0}; HttpOnly" />
      <conditions>
      </conditions>
    </rule>
    <preConditions>
      <preCondition name="No HttpOnly">
        <add input="{RESPONSE_Set_Cookie}" pattern="." />
        <add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

更新

我想出了如何打开跟踪,发现preCondition正在查看所有Cookie,而不是每个cookie。

所以不要评估

Set-Cookie: myC5=we have S Cookie; path=/; secure
Set-Cookie: myC6=we have S Cookie; path=/; secure
Set-Cookie: myC7=we have S Cookie; path=/; secure; HttpOnly

正在评估

myC5=we have S Cookie; path=/; secure,myC6=we have S Cookie; path=/; secure,myC7=we have S Cookie; path=/; secure; HttpOnly

由于整个字符串有; HttpOnly在其中,preCondition失败了。

我如何通过这个?有什么想法吗?

1 个答案:

答案 0 :(得分:11)

我终于通过了这个,所以我想发布其他可能遇到此问题的人。我删除了我的preConditions并使用了条件。然后我不得不使用后面的引用来获取单个cookie。

    <rewrite>
        <outboundRules>
            <rule name="Add HttpOnly">
                <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" />
                <conditions>
                    <add input="{R:0}" pattern="; HttpOnly" negate="true" />
                </conditions>
                <action type="Rewrite" value="{R:0}; HttpOnly" />
            </rule>
            <rule name="Add Secure">
                <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" />
                <conditions>
                    <add input="{R:0}" pattern="; Secure" negate="true" />
                </conditions>
                <action type="Rewrite" value="{R:0}; Secure" />
            </rule>
        </outboundRules>
    </rewrite>

希望这有助于将来。