Az EU általános adatvédelmi rendeletének (GDPR) támogatása a ASP.NET Core-ban
Készítette: Rick Anderson
ASP.NET Core api-kat és sablonokat biztosít az eu általános adatvédelmi rendeletének (GDPR) egyes követelményeinek teljesítéséhez:
- A projektsablonok kiterjesztési pontokat és alap markupot tartalmaznak, amelyeket lecserélhet az Ön adatvédelmi és cookie használati szabályzatára.
- A
Pages/Privacy.cshtml
lap vagyViews/Home/Privacy.cshtml
nézet egy lapot biztosít a webhely adatvédelmi szabályzatának részletezéséhez.
Az Blazor-alkalmazásokra vonatkozó GDPR-útmutatásért tekintse meg az ASP.NET Core-ban az EU általános adatvédelmi rendeletének (GDPR) támogatását Blazor.
Ha engedélyezni szeretné az alapértelmezett cookie hozzájárulási funkciót, amely az ASP.NET Core 2.2 sablonokban található, az aktuális ASP.NET Core sablon által létrehozott alkalmazásban, adja hozzá a következő kiemelt kódot a Program.cs
-hez:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential
// cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Az előző kódban CookiePolicyOptions és UseCookiePolicy használunk.
Adja hozzá a cookie részleges hozzájárulást a
_Layout.cshtml
fájlhoz:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2022 - WebGDPR - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @await RenderSectionAsync("Scripts", required: false) </body> </html>
Adja hozzá a
_CookieConsentPartial.cshtml
fájlt a projekthez:@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-bs-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
Válassza ki az ASP.NET Core 2.2-es verzióját, hogy a cookie hozzájárulási funkcióról olvashasson.
A cookie hozzájárulási értékének testreszabása
Adja meg a nyomon követendő értéket, ha a felhasználó hozzájárult a cookie használati szabályzathoz a CookiePolicyOptions.ConsentCookieValue
tulajdonság használatával:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.ConsentCookieValue = "true";
});
var app = builder.Build();
Inaktív titkosítás
Egyes adatbázisok és tárolási mechanizmusok lehetővé teszik a inaktív titkosítást. Inaktív titkosítás:
- Automatikusan titkosítja a tárolt adatokat.
- Konfiguráció, programozás vagy más munka nélkül titkosítja az adatokat elérő szoftvereket.
- Ez a legegyszerűbb és legbiztonságosabb lehetőség.
- Lehetővé teszi, hogy az adatbázis kezelje a kulcsokat és a titkosítást.
Például:
- A Microsoft SQL és az Azure SQL transzparens adattitkosítási (TDE) biztosítja.
- SQL Azure alapértelmezés szerint titkosítja az adatbázist
- Azure Blobs, Files, Table és Queue Storage alapértelmezés szerint titkosítva van.
Az olyan adatbázisok esetében, amelyek nem biztosítanak beépített titkosítást inaktív állapotban, lemeztitkosítással is biztosítható ugyanez a védelem. Például:
További erőforrások
- A projektsablonok tartalmaznak bővítési pontokat és helykitöltő jelöléseket, amelyeket lecserélhet saját adatvédelmi és cookie felhasználási szabályzataival.
- A cookie hozzájárulási funkció lehetővé teszi, hogy hozzájárulást kérjen (és kövessen nyomon) a felhasználóktól a személyes adatok tárolásához. Ha egy felhasználó nem járult hozzá az adatgyűjtéshez, és az alkalmazás CheckConsentNeeded
true
értékre van állítva, a nem alapvető cookie-kat a rendszer nem küldi el a böngészőnek. - A cookie-k nélkülözhetetlenként jelölhetők meg. Az alapvető cookie-kat akkor is elküldi a böngésző, ha a felhasználó nem járult hozzá, és a nyomon követés le van tiltva.
- TempData- és munkamenet-cookie-k nem működnek, ha a nyomon követés le van tiltva.
- A Identity kezelése lapon található egy hivatkozás a felhasználói adatok letöltésére és törlésére.
A mintaalkalmazás lehetővé teszi a GDPR bővítménypontok és API-k többségének tesztelését a ASP.NET Core 2.1-sablonokhoz. A tesztelési utasításokért tekintse meg a ReadMe fájlt.
Mintakód megtekintése vagy letöltése (hogyan kell letölteni)
ASP.NET alapvető GDPR-támogatás a sablon által létrehozott kódban
Razor projektsablonokkal létrehozott lapok és MVC-projektek a következő GDPR-támogatást tartalmazzák:
-
CookiePolicyOptions és UseCookiePolicy az
Startup
osztályban vannak beállítva. - A _CookieConsentPartial.cshtmlrészleges nézet. A fájl egy Elfogadás gombot tartalmaz. Amikor a felhasználó az Elfogadás gombra kattint, a cookie-k tárolásához való hozzájárulás meg lesz adva.
- A
Pages/Privacy.cshtml
lap vagyViews/Home/Privacy.cshtml
nézet egy lapot biztosít a webhely adatvédelmi szabályzatának részletezéséhez. A _CookieConsentPartial.cshtml fájl létrehoz egy hivatkozást a Privacy lapra. - Az egyéni felhasználói fiókokkal létrehozott alkalmazások esetében a Kezelés lapon hivatkozásokat talál személyes felhasználói adatok letöltésére és törlésére.
CookiePolicyOptions (Süti politika beállítások) és UseCookiePolicy (Süti politika használata)
CookiePolicyOptions a Startup.ConfigureServices
-ben van inicializálva.
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services
// to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
// If the app uses session state, call AddSession.
// services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the
// HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
// If the app uses session state, call Session Middleware after Cookie
// Policy Middleware and before MVC Middleware.
// app.UseSession();
app.UseMvc();
}
}
UseCookiePolicy-t hívják meg Startup.Configure
-ben:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services
// to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
// If the app uses session state, call AddSession.
// services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the
// HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
// If the app uses session state, call Session Middleware after Cookie
// Policy Middleware and before MVC Middleware.
// app.UseSession();
app.UseMvc();
}
}
_CookieConsentPartial.cshtml részleges nézet
A _CookieConsentPartial.cshtml részleges nézet:
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
<span class="sr-only">Toggle cookie consent banner</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
</div>
<div class="collapse navbar-collapse">
<p class="navbar-text">
Use this space to summarize your privacy and cookie use policy.
</p>
<div class="navbar-right">
<a asp-page="/Privacy" class="btn btn-info navbar-btn">Learn More</a>
<button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
</div>
</div>
</div>
</nav>
<script>
(function () {
document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
document.cookie = el.target.dataset.cookieString;
document.querySelector("#cookieConsent").classList.add("hidden");
}, false);
})();
</script>
}
Ez részleges:
- Lekéri a felhasználó nyomon követésének állapotát. Ha az alkalmazás úgy van konfigurálva, hogy hozzájárulást igényeljen, a felhasználónak hozzájárulást kell adnia ahhoz, hogy a cookie-k nyomon követhetők legyenek. Ha hozzájárulásra van szükség, a cookie hozzájárulási panel a _Layout.cshtml fájl által létrehozott navigációs sáv tetején lesz rögzítve.
- HTML-
<p>
elemet biztosít az adatvédelmi és cookie használati szabályzat összegzéséhez. - Nyújtson hivatkozást a Privacy lapra vagy nézetre, ahol részletesen megadhatja a webhely adatvédelmi szabályzatát.
Alapvető cookie-k
Ha nem adták meg a cookie-k tárolására vonatkozó hozzájárulást, csak az alapvetőként megjelölt cookie-kat küldi el a böngésző. A következő kód elengedhetetlenné teszi a cookie-t:
public IActionResult OnPostCreateEssentialAsync()
{
HttpContext.Response.Cookies.Append(Constants.EssentialSec,
DateTime.Now.Second.ToString(),
new CookieOptions() { IsEssential = true });
ResponseCookies = Response.Headers[HeaderNames.SetCookie].ToString();
return RedirectToPage("./Index");
}
A TempData szolgáltatói és munkamenet-állapot cookie-k nem nélkülözhetetlenek
A TempData-szolgáltatócookie nem elengedhetetlen. Ha a nyomon követés le van tiltva, a TempData-szolgáltató nem működik. Akkor is engedélyezze a TempData-szolgáltatót, ha a nyomon követés le van tiltva, jelölje meg a TempData cookie elemet alapvetőnek a Startup.ConfigureServices
-ben:
// The TempData provider cookie is not essential. Make it essential
// so TempData is functional when tracking is disabled.
services.Configure<CookieTempDataProviderOptions>(options => {
options.Cookie.IsEssential = true;
});
munkamenet-állapot cookie-k nem elengedhetetlenek. A munkamenet állapota nem működik, ha a nyomkövetés le van tiltva. A következő kód alapvető fontosságúvá teszi a munkamenet-cookie-kat:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Személyes adatok
ASP.NET egyéni felhasználói fiókokkal létrehozott core-alkalmazások tartalmazzák a személyes adatok letöltésére és törlésére vonatkozó kódot.
Válassza ki a felhasználónevet, majd válassza Személyes adatok:
Jegyzetek
- A
Account/Manage
kód létrehozásához lásd: Állványzat Identity. - A Törlés és Letöltés hivatkozások csak az alapértelmezett identitásadatokon működnek. Az egyéni felhasználói adatokat létrehozó alkalmazásokat ki kell terjeszteni az egyéni felhasználói adatok törlésére/letöltésére. További információért lásd a részt: Egyéni felhasználói adatok hozzáadása, letöltése és törlése a Identityrészekhez.
- A Identity adatbázistáblában tárolt felhasználó mentett jogkivonatai
AspNetUserTokens
akkor törlődnek, ha a felhasználót a idegenkulcs-miatt kaszkádolt törlési viselkedéssel törli. - külső szolgáltatói hitelesítési(például a Facebook és a Google) nem érhető el a cookie szabályzat elfogadása előtt.
Nyugalmi állapotban lévő titkosítás
Egyes adatbázisok és tárolási mechanizmusok lehetővé teszik a inaktív titkosítást. Inaktív titkosítás:
- Automatikusan titkosítja a tárolt adatokat.
- Konfiguráció, programozás vagy más munka nélkül titkosítja az adatokat elérő szoftvereket.
- Ez a legegyszerűbb és legbiztonságosabb lehetőség.
- Lehetővé teszi, hogy az adatbázis kezelje a kulcsokat és a titkosítást.
Például:
- A Microsoft SQL és az Azure SQL transzparens adattitkosítási (TDE) biztosítja.
- SQL Azure alapértelmezés szerint titkosítja az adatbázist
- Azure Blobs, Files, Table és Queue Storage alapértelmezés szerint titkosítva van.
Az olyan adatbázisok esetében, amelyek nem biztosítanak beépített titkosítást inaktív állapotban, lemeztitkosítással is biztosítható ugyanez a védelem. Például:
További erőforrások
- A projektsablonok bővítménypontokat és csonkolt jelölőnyelvet tartalmaznak, amelyeket lecserélhet adatvédelmi és cookie használati szabályzatával.
- A
Pages/Privacy.cshtml
lap vagyViews/Home/Privacy.cshtml
nézet egy lapot biztosít a webhely adatvédelmi szabályzatának részletezéséhez.
Az alapértelmezett cookie hozzájárulási funkció engedélyezéséhez, mint amely a ASP.NET Core 2.2-sablonokban található egy aktuális ASP.NET Core-sablon által létrehozott alkalmazásban:
Adjon hozzá
using Microsoft.AspNetCore.Http
a felhasználói irányelvek listájához.CookiePolicyOptions hozzáadása
Startup.ConfigureServices
és UseCookiePolicyStartup.Configure
:public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential // cookies is needed for a given request. options.CheckConsentNeeded = context => true; // requires using Microsoft.AspNetCore.Http; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } }
Adja hozzá a cookie részleges hozzájárulást a
_Layout.cshtml
fájlhoz:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2019 - RPCC - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @RenderSection("Scripts", required: false) </body> </html>
Adja hozzá a _CookieConsentPartial.cshtml fájlt a projekthez:
@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
A cookie hozzájárulási funkcióról a cikk ASP.NET Core 2.2-es verziójának kiválasztásával olvashat.
- A projektsablonok kiterjesztési pontokat és vázlatos jelöléseket tartalmaznak, amelyeket lecserélhet az adatvédelmi és cookie használati szabályzatára.
- A
Pages/Privacy.cshtml
lap vagyViews/Home/Privacy.cshtml
nézet egy lapot biztosít a webhely adatvédelmi szabályzatának részletezéséhez.
Ha engedélyezni szeretné az alapértelmezett cookie hozzájárulási funkciót, amely az ASP.NET Core 2.2 sablonokban található, az aktuális ASP.NET Core sablon által létrehozott alkalmazásban, adja hozzá a következő kiemelt kódot a Program.cs
-hez:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential
// cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Az előző kódban CookiePolicyOptions és UseCookiePolicy használunk.
Adja hozzá a cookie részleges hozzájárulást a
_Layout.cshtml
fájlhoz:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2022 - WebGDPR - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @await RenderSectionAsync("Scripts", required: false) </body> </html>
Adja hozzá a
_CookieConsentPartial.cshtml
fájlt a projekthez:@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-bs-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
Válassza ki az ASP.NET Core 2.2-es verzióját, hogy a cookie hozzájárulási funkcióról olvashasson.
Inaktív titkosítás
Egyes adatbázisok és tárolási mechanizmusok lehetővé teszik a inaktív titkosítást. Inaktív titkosítás:
- Automatikusan titkosítja a tárolt adatokat.
- Konfiguráció, programozás vagy más munka nélkül titkosítja az adatokat elérő szoftvereket.
- Ez a legegyszerűbb és legbiztonságosabb lehetőség.
- Lehetővé teszi, hogy az adatbázis kezelje a kulcsokat és a titkosítást.
Például:
- A Microsoft SQL és az Azure SQL transzparens adattitkosítási (TDE) biztosítja.
- SQL Azure alapértelmezés szerint titkosítja az adatbázist
- Azure Blobs, Files, Table és Queue Storage alapértelmezés szerint titkosítva van.
Az olyan adatbázisok esetében, amelyek nem biztosítanak beépített titkosítást inaktív állapotban, lemeztitkosítással is biztosítható ugyanez a védelem. Például: