web-dev-qa-db-ja.com

IIS Rewriteを使用して、機能しないCookieにHttpOnlyフラグを追加する

HttpOnlyをCookieに追加する例を数多く見つけましたが、それが機能せず、理由がわかりません。私が見つけたすべての例は同じであり、私が見つけた投稿の1つからこれをコピーしました。 IIS 7.0で.NET3.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は失敗します。

どうすればこれを乗り越えることができますか?何か案は?

15
mrhoades

私はついにこれに合格したので、これに遭遇するかもしれない他の人のために投稿したかった。 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>

これが将来誰かに役立つことを願っています。

17
Liam