AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebResponse.SetCookieField fehlt Support für "SameSite"
Thema durchsuchen
Ansicht
Themen-Optionen

TWebResponse.SetCookieField fehlt Support für "SameSite"

Ein Thema von Rolf Frei · begonnen am 7. Jan 2020 · letzter Beitrag vom 19. Apr 2021
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#1

TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 7. Jan 2020, 16:52
Ab 2020 oder Version 80 für Chome sollten Cookies mit dem SameSite attribute ergänzt werden, damit sie noch funktionieren, respektive vom Browser übermittelt werden. Ich möchte da nun eigentlich SameSite=Strict für alle meine Cookies verwenden. Wie ich festgestellt habe fehlt aber Delphi der Support dieses Cookie Attribute! (siehe Web.HTTPApp.pas TCookie)

Hier eine Beschreibung was SameSite genau ist:
https://web.dev/samesite-cookies-explained/

Nun habe ich versucht das mit SetCustomHeader zu lösen. Da alle Cookies den selben Headernamen "Set-Cookie" erhalten, geht das nicht. Als Resultat bekomme ich so immer nur ein einziges Cookie, da dort der Wert über den Namen "Set-Cookie" immer ersetzt wird. Mit SetCustomeHeader ist das also auch nicht lösbar. Direktes Abfüllen von CustomHeaders geht auch nicht, weil da wieder mit Name/Values gearbeitet wird und ich so auch immer nur den Wert des ersten Cookie Eintrags für jedes "Set-Cookie" bekomme.

Wie soll ich das nun lösen? Sehe da absolut keine Möglichkeit. Ändern der TCookie Klasse kommt auch nicht in Frage, da so fast alle Web Units, durch die Änderung am Interface, inkompatibel werden.

Bin echt geschockt, dass das in der aktuellen Delphi Verison noch fehlt. Das Cookie Attribute SameSite ist ja schon etwas älter. Dass das in einer alten D7 Version noch nicht enthalten ist, vestehe ich ja noch, aber dass das selbst in der aktuellen Version noch fehlt?!

Geändert von Rolf Frei ( 7. Jan 2020 um 19:21 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#2

AW: TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 4. Dez 2020, 10:51
Hi Rolf,

ich bin gerade auch darüber gestolpert, weil mein Firefox mich im Debug-Fenster warnt, dass er meine Kekse zukünftig nicht mehr akzeptiert, wenn ich nicht ein SameSite-Attribut setze.

Da ich gesehen habe, dass das selbst in der 10.4 noch immer nicht enthalten ist, wäre die Frage, ob du zwischenzeitlich einen funktionierenden Workaround gefunden hast?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.020 Beiträge
 
Delphi 12 Athens
 
#3

AW: TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 4. Dez 2020, 20:18
Wenn eine Subscription bei EMBT voirhanden ist evtl. mal einen offiziellen Supportfall dort aufmachen.
Evtl. wissen die noch was...
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#4

AW: TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 7. Dez 2020, 09:25
Stimmt, ein Ticket aufzumachen, wäre noch eine Möglichkeit. Ich habe bei mir jetzt erstmal die größte Dramatik rausbekommen, indem ich das Cookie als "Secure" kennzeichne (es wird im produktiven Einsatz ja eh über https gearbeitet), dann warnt der Browser nicht mehr.

Ein anderer Workaround, den ich jetzt schon getestet habe, aber weil das obige ja funktioniert, jetzt noch nicht scharf geschaltet habe, wäre es, die neue ID auf anderem Weg an den Client zu senden und dann vom Client aus per Javascript zu setzen. So lässt sich dann auch problemlos das SameSite-Attribut setzen.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 7. Dez 2020, 19:48
Du kannst das so mache wie ich im Report gemeldet habe, nur ist das keine schöne Lösung, weil man da an den Originalsourcen herumbasteln muss. Leider ist der TCookie Code so unsauber programmiert, dass da garnichts virtual ist. Wäre da GetHeaderValue virtual, wäre es relativ einfach zu lösen gewesen, aber so wie es aktuell ist, kommt man nicht drummherum in den Quellsourcen von Delphi Anpassungen zu machen und eine eigegne TCookie Klasse zu verrweden. Direkt im TCookie kann man auch nichts anpasen, da das sonst zu inkompatiblen (Interface) Units führt.

Delphi-Quellcode:
unit RFWebAppCookie;

interface

uses
  HTTPApp;
  
type
  TRFCookie = class(HTTPApp.TCookie)
  private
    FSameSite: String;
  protected
    function GetNewHeaderValue: string;
  public
    property SameSite: String read FSameSite write FSameSite;
    property HeaderValue: string read GetNewHeaderValue;
  end;


implementation

uses
  SysUtils;

{ TRFCookie }

function TRFCookie.GetNewHeaderValue: string;
begin
  Result := Format('%s=%s; ', [HTTPEncode(Name), HTTPEncode(Value)]);
  if Domain <> 'then
    Result := Result + Format('domain=%s; ', [Domain]); { do not localize }
  if Path <> 'then
    Result := Result + Format('path=%s; ', [Path]); { do not localize }
  if Expires > -1 then
    Result := Result +
      Format(FormatDateTime('"expires="' + sDateFormat + ' "GMT; "', Expires), { do not localize }
        [DayOfWeekStr(Expires), MonthStr(Expires)]);
  if SameSite <> 'then
    Result := Result + 'SameSite=' + SameSite + '; ';
  if Secure then Result := Result + 'secure'; { do not localize }
  if Copy(Result, Length(Result) - 1, MaxInt) = '; then
    SetLength(Result, Length(Result) - 2);
end;

end.
An den Stellen in der Orignalsource wo TCookie verwendet wird muss nun diese neue Klasse benutzen. Weiss akteull nciht mehr genau wo und was ich da genau geändert habe. Müsste das zuerst neu zusammen suchen.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#6

AW: TWebResponse.SetCookieField fehlt Support für "SameSite"

  Alt 19. Apr 2021, 13:48
Falls es noch wen interessiert oder jemand per Google hier bei dem Thema landet: Emba hat in 10.4.2 versucht, "SameSite" für Cookies umzusetzen. Zumindest aber, wenn man das für Web-Server-Anwendungen (WebBroker) nutzt, bringt das nichts, weil dort zum Senden der Antwort Indy benutzt wird und Indy verschluckt dieses neue Attribut wieder, weil es dort noch immer nicht bekannt ist.

Ich hab mal einen neuen QP-Eintrag dazu erstellt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz