Megosztás a következőn keresztül:


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 vagy Views/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">
                &copy; 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.

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:

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 CheckConsentNeededtrueé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 vagy Views/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:

Személyes adatok kezelése lap

Jegyzetek

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:

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 vagy Views/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">
                &copy; 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 vagy Views/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">
                &copy; 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:

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