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中执行以下操作:
- 安装用于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)(=.*)$仅适用于名为CFIDECFTOKEN或的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>

本文介绍了如何在不支持SameSite Cookies的环境中,尤其是针对IIS服务器,通过URL重写模块来实现这一功能。步骤包括安装IIS URL重写模块、配置服务器级别的规则,以及使用web.config文件为单个站点添加规则。尽管一些应用程序服务器和语言尚未原生支持,但此方法提供了一种解决跨站请求伪造问题的途径。
937

被折叠的 条评论
为什么被折叠?



