SameSite
Cookies是缓解跨站请求伪造攻击的好技术。唯一的缺点是,并不是所有的浏览器都支持它们(哎呀……看着你IE)。
您可能会发现的另一个缺点是,大多数应用程序服务器软件尚不支持它们,例如javax.servlet.http.Cookie
尚不支持(因此,像CFML之类的语言也可能在等待添加),PHP具有RFC,希望将其添加到其中。在7.3中,ASP.NET Core已将它们添加到2.0和.NET Framework 4.7.2中。
如果当前平台尚不支持它们,但是您想使用它们,则可以使用Web服务器将SameSite
属性附加到Set-Cooke
http响应标头。
使用IIS URL重写模块在IIS中执行以下操作:
- 安装用于IIS的Microsoft URL重写:http://www.iis.net/downloads/microsoft/url-rewrite
- 关闭IIS,然后再次将其打开。
- 在IIS的根服务器级别节点上,单击(这样就适用于服务器上的所有站点),
- 双击URL重写图标
- 点击添加规则
- 在出站规则下,选择空白规则
- 给它起一个任意的名字,例如
AddSameSiteCookieFlag
- 在“匹配”下,选择“匹配范围”:
Server Variable
- 对于变量名,请使用:
RESPONSE_Set-Cookie
- 可变值:
Matches Pattern
- 使用方法:
Regular Expressions
- 模式:(
^(.*)(CFID|CFTOKEN|JSESSIONID)(=.*)$
仅适用于名为CFIDE
CFTOKEN
或的CookieJSESSIONID
,根据需要进行修改) - 在“操作”下,“操作类型”:
Rewrite
- 动作属性:值:(
{R:0};SameSite=lax
如果您现有的cookie具有结尾的分号,您可以在此处将其删除,也可以考虑使用Strict
代替Lax
)。 - 选中替换现有服务器变量
或以下是使用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>