Cómo deshabilitar la política de cookies de SameSite en Cefsharp (WinForms C#)

El atributo SameSite en las cookies básicamente te permite declarar que la cookie debe restringirse a un contexto propio o del mismo sitio (tu dominio). Esto significa, con un ejemplo simple, una solicitud realizada desde ourcodeworld.com al subdominio cdn.ourcodeworld.com es una solicitud del mismo sitio. Sin embargo, es.ourcodeworld.com es diferente de cdn.ourcodeworld.com, ya que contarían como sitios web diferentes (solicitud entre sitios).

En todos los navegadores, era normal enviar las cookies a todas partes, pero hasta las versiones recientes con la nueva política, los usuarios ya no son vulnerables a CSRF y a la fuga de información involuntaria.

El problema con esto en Cefsharp es que la mayoría de las aplicaciones que se desarrollaron hace algún tiempo pueden depender de esta función, por lo que actualizar Cefsharp a la última versión disponible (87 hasta la fecha) romperá la funcionalidad de la aplicación. Afortunadamente, es posible deshabilitar el nuevo comportamiento deshabilitando la función SameSiteByDefaultCookies.

Considera el siguiente ejemplo de Cefsharp que lanza el sitio web de zona de pruebas de SameSite:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

namespace CefsharpSandbox
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser chromeBrowser;

        public void InitializeChromium()
        {
            CefSettings settings = new CefSettings();

            Cef.Initialize(settings);

            // Crear un componente de navegador
            chromeBrowser = new ChromiumWebBrowser("https://samesite-sandbox.glitch.me/");

            // Agréguelo al formulario y rellénelo en la ventana del formulario.
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
        }

        public Form1()
        {
            InitializeComponent();

            // Inicie el navegador después de inicializar el componente global
            InitializeChromium();
        }
    }
}

Debería aparecer el siguiente sitio web y también los resultados:

CefSharp Cookies Cross-domain

Como puedes ver, con los sitios cruzados, la cookie no está configurada como es lo más seguro (esto para alentar a los desarrolladores a manifestar su intención y brindar a los usuarios una experiencia más segura). Pero como se mencionó, es posible que necesites desactivar esta función. Puedes deshabilitar esta función a través de la bandera SameSiteByDefaultCookies. En la configuración de inicialización, agrega la nueva opción a la llave de inhabilitación de funciones:

CefSettings settings = new CefSettings();

// Deshabilitar SameSiteByDefaultCookies para permitir cookies entre sitios
// agregando el nombre de la característica al final de la tecla de inhabilitación de características
settings.CefCommandLineArgs["disable-features"] += ",SameSiteByDefaultCookies";

Cef.Initialize(settings);

Inicia tu aplicación y si visitas la página de la herramienta una vez más, verás que las Cookies en la columna de sitios cruzados ahora están configuradas:

Cefsharp Disable SameSiteByDefaultCookies Features

Exactamente lo que necesitas para que tu aplicación vuelva a funcionar.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable