【问题标题】:Classic ASP use of "SameSite" on cookies [duplicate]经典 ASP 在 cookie 上使用“SameSite”[重复]
【发布时间】:2020-08-17 07:23:11
【问题描述】:

我们使用 Classic ASP 通过 Response.Cookies( "CookieName" ) 构建我们的 cookie。我们如何将“SameSite”设置为无?

【问题讨论】:

  • stackoverflow.com/questions/63149155/… 这应该会有所帮助,这是我为设置自定义 cookie 编写的代码。 SameSite 设置是一个选项(默认没有)。
  • 谢谢亚当。所以本质上唯一的选择是使用 Response.AddHeader 来创建cookie?
  • 经典 ASP 已有 20 年历史,Response.Cookies 相当有限,但Response.AddHeader 让您可以完全控制响应头内容。
  • 明白了,在我采用的系统中,这可能是一个相当长的重写。有没有办法在使用 Response.Cookies 创建后编辑 cookie 以设置 SameSite 或不去?
  • 你可以使用web.config自动添加,但是我没有那个代码。

标签: cookies asp-classic


【解决方案1】:

试试这个(你需要安装 URLRewrite 模块)。您还需要使用 https 协议(SameSite 仅在还包含 Secure 时才有效,并且您不能在不使用 https 协议的情况下包含 Secure)。 HttpOnly 也应始终使用,但如果您的网站上有一些 JavaScript 代码需要读取 cookie,HttpOnly 会阻止这种情况。

您可能还需要在 IIS 的 URLRewrite 下的“允许的服务器变量”中添加“HTTP_COOKIE”。但我认为这只是为了读取传入的 cookie。

编辑:经过试验和测试,完美运行。

注意:如果您已经在使用Response.Cookies("CookieName").Secure = True,它会将Secure 添加到响应标头值两次(除非您从操作重写值中删除Secure),被包含两次应该不是问题,但有些浏览器可能对这样的东西很挑剔,尤其是 Chrome,因为谷歌继续通过更严格的 cookie 规则推出越来越多的更新。

httpProtocol > customHeaders 部分是完全可选的,但它会为您的网站增加更多安全性。

web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
        <outboundRules>
            <rule name="SameSite rewrite">
                <match serverVariable="RESPONSE_Set_Cookie" pattern="(.*)=(.*)" negate="false" />
                <action type="Rewrite" value="{R:1}={R:2}; SameSite=None; HttpOnly; Secure" />
            </rule>     
        </outboundRules>
    </rewrite>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="SAMEORIGIN" />
        <add name="X-Content-Type-Options" value="nosniff" />
        <add name="X-XSS-Protection" value="1; mode=block" />
        <add name="Referrer-Policy" value="strict-origin" />
        <add name="Strict-Transport-Security" value="max-age=31536000" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

【讨论】:

  • 感谢 Adam,这可以解决问题,但是我希望在我的 ASP 代码中可以选择执行此操作,以便我可以添加一些额外的逻辑来检查数据库中的系统相关设置。我现在还发现 iOS 不支持这一点,通过设置它会破坏 iOS。这似乎不是谷歌经过深思熟虑的更新?还有为什么他们不允许某种“白名单”而不是强迫所有人一起禁用它
猜你喜欢
  • 2021-09-29
  • 2015-09-14
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2011-11-08
  • 2016-06-04
  • 1970-01-01
相关资源
最近更新 更多