Как включить файлы cookie HttpOnly на веб-сайте ASP.NET Core 2.1 - PullRequest
0 голосов
/ 08 января 2019

Я создал стандартный веб-сайт ASP.NET Core MVC с Core 2.1 в Visual Studio, используя File-> New Project.

В Startup.cs есть шаблон кода

 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?}");
        });
    }

Когда я просматриваю сайт, при принятии политики cookie появляется один файл cookie .AspNet.Consent. По умолчанию он помечен как безопасный, но не httponly.

Как включить HttpOnly для ВСЕХ файлов cookie?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Вы пробовали это?

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

});
0 голосов
/ 09 января 2019

При настройке cookie вручную (например, для HTTPContext) существует простой объект CookieOptions, который можно использовать для установки HttpOnly в значение true. Это выглядит примерно так:

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

У Microsoft есть промежуточное ПО, которое использует куки для аутентификации. Если вы должны использовать его в своем приложении, вы добавляете его в метод Configure вашего startup.cs.

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

Если вы используете CookieAuthentication таким образом, HttpOnly cookie будет использоваться по умолчанию. Для получения более подробной информации см. здесь

0 голосов
/ 08 января 2019

Cookie согласия не является HttpOnly, потому что он установлен на стороне клиента через JavaScript. Вы можете найти код в _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>

Если вам нужен файл cookie HttpOnly, вы должны самостоятельно реализовать логику согласия в промежуточном программном обеспечении или в контроллере и использовать обычную форму с POST-запросом, например.

...