IIS的SameSite Cookies

时间:2024-04-13 13:56:13

SameSiteCookies是缓解跨站请求伪造攻击的好技术。唯一的缺点是,并不是所有的浏览器都支持它们(哎呀……看着你IE)。

您可能会发现的另一个缺点是,大多数应用程序服务器软件尚不支持它们,例如javax.servlet.http.Cookie尚不支持(因此,像CFML之类的语言也可能在等待添加),PHP具有RFC,希望将其添加到其中。在7.3中,ASP.NET Core已将它们添加到2.0和.NET Framework 4.7.2中。

如果当前平台尚不支持它们,但是您想使用它们,则可以使用Web服务器将SameSite属性附加到Set-Cookehttp响应标头。

使用IIS URL重写模块在IIS中执行以下操作:

  1. 安装用于IIS的Microsoft URL重写:http://www.iis.net/downloads/microsoft/url-rewrite
  2. 关闭IIS,然后再次将其打开。
  3. 在IIS的根服务器级别节点上,单击(这样就适用于服务器上的所有站点),
  4. 双击URL重写图标
  5. 点击添加规则
  6. 出站规则下,选择空白规则
  7. 给它起一个任意的名字,例如 AddSameSiteCookieFlag
  8. 在“匹配”下,选择“匹配范围”: Server Variable
  9. 对于变量名,请使用: RESPONSE_Set-Cookie
  10. 可变值: Matches Pattern
  11. 使用方法: Regular Expressions
  12. 模式:(^(.*)(CFID|CFTOKEN|JSESSIONID)(=.*)$仅适用于名为CFIDE CFTOKEN或的Cookie JSESSIONID,根据需要进行修改)
  13. 在“操作”下,“操作类型”: Rewrite
  14. 动作属性:值:({R:0};SameSite=lax如果您现有的cookie具有结尾的分号,您可以在此处将其删除,也可以考虑使用Strict代替Lax)。
  15. 选中替换现有服务器变量
  16. IIS的SameSite Cookies
  17. IIS的SameSite Cookies
 

或以下是使用web.config文件将其添加到单个站点的方法:

 

<rewrite>
            <outboundRules>
                <rule name="AddSameSiteCookieFlag">
                    <match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*)(CFID|CFTOKEN|JSESSIONID)(=.*)$" />
                    <action type="Rewrite" value="{R:0};SameSite=lax" />
                </rule>
            </outboundRules>
</rewrite>