GDPR 政策相關知識

參考資料

GDPR 概觀
ASP.NET Core 中的 EU 一般資料保護規定 (GDPR) 支援

白話 GDPR

源於歐洲對於個人資料保護法規。各網站常把個人的網上瀏灠訊息隨意存入 cookie 中。這在歐洲是違法的且罰款相當嚴重。其他各國也都跟進此法規。

總之,需讓用戶同意才可以把用戶個資存取到 cookie 。

在實作上 GDPR 就只有宣告而已。一般作法是用戶開啟網站時就通告將把個資存入 cookie,請求用戶同意。

若是基本且必要的(essential) cookie 就不需用戶同意就可寫入。比如認證用的 Cookie-based Authentication

程式碼部份

不同的網站性質實作 GDPR 的流程不一樣。本範例並沒有把個資存入 cookie 故沒有提供使用者同意的實作範例。

有點意思的是紀錄用戶有否同意 GDPR 的紀錄也存在 cookie 中,在 ASP.NET Core 的預設名稱:.Asp.Net.Consent ,若其值是 "yes" 就表示用戶同意了。

宣告啟用 GDPR 政策 for ASP.NET Core

Program.cs
[...略...]

builder.Services.Configure<CookiePolicyOptions>(options =>
{
  options.MinimumSameSitePolicy = SameSiteMode.Lax; // SameSiteMode.Strict;

  //§§ for GDPR Consent
  // AspNetCore2.1 supports the GDPR specification introduced on May 25, 2018,
  // which considers cookies to be private data of users.If they are to be used,
  // they must obtain user consent.
  options.CheckConsentNeeded = context => true; // 啟用 GDPR 政策檢查
  options.ConsentCookie.Name = ".AspNet.Consent"; // ".AspNet.Consent"
  options.ConsentCookie.HttpOnly = false;
  options.ConsentCookie.Expiration = TimeSpan.FromDays(365);
});

[...略...]

本例由主機送回客製 XSRF token 用於登入驗證檢查,若已啟用 GDPR 則前端無法取到 cookie 除非宣示成 IsEssential=true cookie才行。

ValidateXsrfTokenFilter.cs
[...略...]

public static void ResponseAndStoreXsrfToken(HttpContext context, IMemoryCache cache)
{
  Guid loginSid = Guid.NewGuid();
  string token = Utils.AesSimpleEncrypt(loginSid);
  cache.Set($"XSRF-TOKEN:{loginSid}", token, TimeSpan.FromMinutes(3)); // 3分鐘內需完成登入

  context.Response.Cookies.Append(XSRF_TOKEN_NAME, token, new CookieOptions()
  {
    Expires = DateTimeOffset.Now.AddMinutes(3),
    SameSite = SameSiteMode.Lax, // SameSiteMode.Strict,
    Secure = true,
    HttpOnly = true,
    IsEssential = true, 
    // for GDPR Consent. 若該 cookie 為 essential 就不需使用者同意就可寫入。.
  });
}

完整程式碼

(EOF)

Last updated