当SameSite =不安全时,Internet Explorer / Edge(非铬)添加其他SameSite = Lax

时间:2020-02-05 12:36:28

标签: internet-explorer microsoft-edge samesite

我在Microsoft Dynamics页面的iframe中加载了.NET MVC应用程序。 最初,用户将打开主页。家庭控制器将重定向到登录页面:

return RedirectToAction("Index", "Login", new { returnUrl = redirectURL, error = errorMessage });

在此更新KB4533002 Cumulative Update for .NET之前,如果SameSite为None或未指定,则添加SameSite = Lax,这是可以的。 然后,我在网络配置中添加了出站规则,以发送 SameSite = None;安全

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

这可在Chrome,Firefox和最新的Edge中使用。

但是Internet Explorer和Edge(不是Chromium)正在添加其他SameSite:

HttpOnly: true
path:/
SameSite: Lax
SameSite: None
Secure: true

Screenshot from Edge Developer Tools

知道如何预防这种情况的人吗?

2 个答案:

答案 0 :(得分:1)

可能是因为默认的SameSite设置为宽松。您可以尝试根据this link设置(SameSiteMode)(-1)来删除SameSite属性:

在已应用这些更新的系统上,可以通过将SameSiteMode设置为(SameSiteMode)(-1)来指定以前的行为。您可以使用web.config中的字符串Unspecified来指定此行为。

有关如何进行设置的更多信息,可以参考this articlethis answer

此外,您还可以参考两个类似的线程:

(1) how SameSite attribute added to my Asp.net_SessionID cookie automatically?

(2) How to set SameSite cookie attribute to explicit None ASP NET Core

答案 1 :(得分:0)

谢谢于周。这很有用,但我将其设置为None而不是Unspecified。

<sessionState mode="SQLServer" sqlConnectionString="***" ... cookieless="UseCookies" cookieSameSite="None" />

这与出站规则(SameSite = None; Secure)对我有用。