3
votes

Comment activer les cookies HttpOnly sur le site Web ASP.NET Core 2.1

J'ai créé un site Web ASP.NET Core MVC standard avec Core 2.1 dans Visual Studio à l'aide de File-> New Project.

Dans Startup.cs se trouve le code standard

 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.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();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }


0 commentaires

3 Réponses :


2
votes

Le cookie de consentement n'est pas HttpOnly car il est défini côté client via JavaScript. Vous pouvez trouver le code dans le _CookieConsentPartial.cshtml:

<script>
    (function () {
        var button = document.querySelector("#cookieConsent button[data-cookie-string]");
        button.addEventListener("click", function (event) {
            document.cookie = button.dataset.cookieString;
        }, false);
    })();
</script>

Si vous avez besoin d'un cookie HttpOnly, vous devez implémenter vous-même la logique de consentement dans un middleware ou un contrôleur et utiliser un forme régulière avec une requête POST par exemple.


1 commentaires

Je pense que c'est la meilleure réponse. Il semble que le seul moyen soit de se connecter au middleware de cookies de Microsoft et de définir HttpOnly sur leurs cookies.



2
votes

Avez-vous essayé ceci?

services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(10);

});


1 commentaires

Ce n'est pas la meilleure réponse à la question posée, mais c'est la meilleure pour résoudre le problème spécifique avec le cookie de `` consentement '', comme cela s'est produit récemment avec Chrome 80.



1
votes

Lors de la configuration manuelle d'un cookie (par exemple sur un HTTPContext), il existe un objet CookieOptions simple que vous pouvez utiliser pour définir HttpOnly sur true. Cela finit par ressembler un peu à ceci:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMvc();
    app.UseCookieAuthentication();
}

Microsoft a un middleware qui utilise des cookies pour l'authentification. Si vous deviez l'utiliser dans votre application, vous l'ajoutez dans la méthode Configure de votre startup.cs.

HttpContext.Response.Cookies.Append(
"CookieKey",
"CookieValue",
new CookieOptions
{
    HttpOnly = true
});

Si vous utilisez CookieAuthentication de cette manière, Cookies HttpOnly a > sera utilisé par défaut. Pour plus de détails, consultez ici p>


1 commentaires

Merci, j'ai lu ce site mais je n'ai pas réussi à faire fonctionner les suggestions.