GDPR 政策相關知識
參考資料
白話 GDPR
源於歐洲對於個人資料保護法規。各網站常把個人的網上瀏灠訊息隨意存入 cookie 中。這在歐洲是違法的且罰款相當嚴重。其他各國也都跟進此法規。
總之,需讓用戶同意才可以把用戶個資存取到 cookie 。
在實作上 GDPR 就只有宣告而已。一般作法是用戶開啟網站時就通告將把個資存入 cookie,請求用戶同意。
也有不需用戶同意就可寫入的 cookie。
若是基本且必要的(essential) cookie 就不需用戶同意就可寫入。比如認證用的 Cookie-based Authentication。
程式碼部份
不同的網站性質實作 GDPR 的流程不一樣。本範例並沒有把個資存入 cookie 故沒有提供使用者同意的實作範例。
有點意思的是紀錄用戶有否同意 GDPR 的紀錄也存在 cookie 中,在 ASP.NET Core 的預設名稱:.Asp.Net.Consent
,若其值是 "yes" 就表示用戶同意了。
宣告啟用 GDPR 政策 for ASP.NET Core
[...略...]
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);
});
[...略...]
回傳(寫入) essential cookie
本例由主機送回客製 XSRF token 用於登入驗證檢查,若已啟用 GDPR 則前端無法取到 cookie 除非宣示成 IsEssential=true
cookie才行。
[...略...]
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