我在网上冲浪,发现了第Preventing CSRF with the same-site cookie attribute条.

作为链接维护,我们需要添加设置Cookie头.

Set-Cookie:Key=Value;HttpOnly;SameSite=Strict

现在我的问题是,我想在我的ASP.NET站点的"所有Cookie"和"身份验证Cookie"中设置它. 我试图使用来自IIS的头来设置它,但是有人说这是错误的实现方式.

我也试过下面的方法.

HttpCookie newAuthenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName
                    , FormsAuthentication.Encrypt(newAuthenticationTicket))
                {
                    HttpOnly = true
                };
newAuthenticationCookie.Values.Add("SameSite", "strict");

但这似乎帮不了我.

请给我一个更好的方法.

谢谢

推荐答案

在深入查看HttpCookie Source之后,确认我们不能对代码执行此操作,因为没有办法在Cookie上添加额外的属性,并且类被标记为密封的.

但不管怎样,我还是通过修改web.config来管理解决方案,如下所示.

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

这将在每个Set-Cookie上加上SameSite=strict.

Asp.net相关问答推荐

我可以将图像添加到 ASP.NET 按钮吗?

在 ASP.Net 中使用自定义 RoleProvider 时如何允许多个角色查看页面

在 aspx 页面中使用 if else 和 eval

任何人都有解决 Internet Explorer 上剩余 n 项问题的 idea 吗?

如何缓存数据库表以防止在 Asp.net C# mvc 中出现许多数据库查询

SameSite 属性如何自动添加到我的 Asp.net_SessionID cookie 中?

Web api 不支持 POST 方法

用户NT AUTHORITY\NETWORK SERVICE登录失败

__doPostBack 未定义

每个 'HttpRequest' 在 ASP.NET 中都有自己的线程吗?

判断邮箱地址是否对 System.Net.Mail.MailAddress 有效

获取页面上特定类型的所有 Web 控件

LINQ:使用 Lambda 表达式获取 CheckBoxList 的所有选定值

我的 asp.net mvc Web 应用程序中的 OutputCache 设置.防止缓存的多种语法

使用 ASP.NET Web API 对 PUT 和 DELETE 的 CORS 支持

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

带有模型的 ASP.NET MVC 重定向

路由模板分隔符/不能连续出现 - 属性路由问题

ASP.NET Excel 导出编码问题

如何修复 ASP.NET 错误文件 'nnn.aspx' 尚未预编译,无法请求.?