|
![]() |
Andreas L.
CookieCrumbler
CookieCrumbler durchsucht das System nach Cookies und erstellt anschließend eine Sicherheitsbewertung jedes Cookies. Man hat dann die Möglichkeit alle Cookies zu löschen oder nur jene, die eine negative Sicherheitsbewertung erhalten haben. Desweiteren kann jedes Cookie auch manuell gelöscht oder dessen Inhalt verändert werden. Es ist ebenfalls möglich eine automatische Bereinigung beim Systemstart durchzuführen. Cookies können zwar nützlich sein (Auto-Login auf Webseiten z. B.) aber auch eindeutige Benutzerids enthalten (verfolgendes Cookie) die bei jeden Zugriff auf eine entsprechend präparierte Seite (meistens über Werbebanner) geloggt werden. Nach und nach kann der "Ersteller" des Cookies eine Art Benutzerprofil anlegen, was wohl von den meistens Internetbenutzern nicht gewünscht ist. Natürlich bieten aktuelle Browser die Option Cookies beim Beenden zu löschen, manche Cookies möchte man aber behalten (Sucheinstellungen, Auto-Login, usw.). Manuell aussortieren ist bei einem durchschnittlichen Surfer ziemlich zeitintensiv, schaut man sich an wie viele Cookies nur durch ein paar Stunden surfen anfallen können. Und dann sind da noch Cookies wo man sie nicht vermuten würde: In Mediaplayern, Videobearbeitungssoftware und anderen Programmen. CookieCrumbler findet fast alle Cookies (siehe unterstützte Programme)! Eine ausführliche Erklärung warum Cookies eine Bedrohung darstellen gibt es in der noch unfertigen ![]() Funktionen
Unterstützte Programme
Läuft seit Version 1.3 nicht mehr unter Win9x! Min. Windows-Version ist 2000. Screenshots ![]() ![]() ![]() ![]() Weitere Screenshots sind auf der ![]() Lizenz Gratis für die private Verwendung Download ![]() ![]() ![]() Links ![]() ![]() ![]() Changelog Version 1.5.10 - 09.08.2009 [#]Zeitpunkt vom letzten Update wird richtig erkannt[*]Filterlisten aktualisiert Version 1.5.9 - 05.08.2009 [#]Löschen-Button funktioniert jetzt richtig [#]Die Breite der Spalten im Cookie-Editor werden jetzt richtig gespeichert [#]Internet Explorer DHTML Behaviors werden jetzt richtig erkannt Version 1.4.9 - 29.07.2009 [#]Flash-Cookies werden jetzt richtig gespeichert [#]Update funktioniert jetzt [#]Rechtschreibfehler behoben [+]Safari cookies werden jetzt erkannt Vesion 1.3.8 - 14.07.2009 : ![]() [#]Zurück-Button im Bereinigendialog geht jetzt [+]Englische Sprache hinzugefügt [#]Willkommen-Dialog sieht jetzt auch mit klassischen Windows-Theme schick aus [+]Doppelklick im Cookie-Editor öffnet Bearbeiten-Dialog [+]ENTER-Taste im Cookie-Editor öffnet Bearbeiten-Dialog [+]ENTF-Taste im Cookie-Editor löscht die gewählten Einträge [#] ![]() Version 1.3.7 - 12.07.2009 [+]Zusammenfassung mit ![]() [+]Regeln können jetzt direkt im Bereinigen/Einstellungen Dialog bearbeitet werden [#]Die Bereinigenroutine funktioniert jetzt problemlos, es wird wirklich alles gelöscht was weg muss. Hab das in unzähligen Konstellationen getestet!!! [#]Speichern sollte jetzt 50 % schneller sein und nicht mehr hängen bleiben [+]Fortschrittsanzeige beim Speichern [#]Änderungen können jetzt jederzeit gespeichert werden, man kann außerdem die Änderungen verwerfen (d. h. die Original-Daten laden) [#]Schönheitsfehler behoben [#]Updateprogramm vollständig überarbeitet [+]In der Statusleiste des Cookie-Editors wird die Anzahl der Cookies angezeigt Version 1.2.6 20.06.2009 [+]Option: Regel ignorieren wenn das Cookie als gefährlich eingestuft wurde [+]"CookieCrumbler beenden"-Button im "Anwendungen schließen"-Fenster [#]Webappsstore (Mozilla DOM Cookies) werden jetzt korrekt gespeichert [#]Bug mit der Cookielistensortierung (was für ein Wort..) wenn ein Cookie gelöscht wird ist jetzt behoben Version 1.2.5 20.06.2009 [+]Sprache Lettisch hinzugefügt [#]Bug bei automatischer Bereingung beim Systemstart behoben [#]Kleinere Schönheitsfehler korrigiert Version 1.1.4 20.06.2009 [+]Spalten im Cookie-Editor lassen sich nun sortieren [+]Suchfunktion [#]Bug beim Beenden/Speichern müsste jetzt behoben sein |
Andreas L. |
Andreas L.
|
#41
![]() ![]() ![]() ---------------------------
CookieCrumbler --------------------------- Ungültiges Argument zum Codieren des Datums. --------------------------- OK --------------------------- ![]() ![]() Ehm ...
![]() Und wenn mir deinen Code oben angucke benutzt du ihn ebenfalls ![]() ![]() Weil dieses "GetTable" mich irgendwie ankotzt, da man kein Objekt zurückgeben sollte.
![]() Es waren 4 "gefährliche"... Also Durchschnittlich 3 Sekunden pro Cookie! Dürfte man denn in die Unit gucken?
![]() CookieCrumblerApp.pas Ich lege alle Cookies in einer, naja, universellen Cookie-Liste ab. Beim speichern kopiere ich mir die Cookies wieder in die spezielle "Format-Cookie-List" und speichere.
Delphi-Quellcode:
BCCookies.pas
procedure TCookieCrumblerApp.SaveCookies;
var iCookie, iFile: Integer; MozillaCookies: TBcMozillaCookies; FirefoxCookies: TBcFirefoxCookies; FlashCookies: TBcFlashSharedObjectsCookies; ChromeCookies: TBcChromeCookies; IECookies: TBcIECookies; IEDHTMLCookies: TBcIEDHTMLBehaviorsCookies; MozillaDOM: TBcMozillaDOMStorageCookies; //SafariCookies: TBcSafariCookies; TempCookies: TBcMultiCookieHolder; begin MozillaCookies := TBcMozillaCookies.Create(nil); FirefoxCookies := TBcFirefoxCookies.Create(nil); FlashCookies := TBcFlashSharedObjectsCookies.Create(nil); ChromeCookies := TBcChromeCookies.Create(nil); IECookies := TBcIECookies.Create(nil); IEDHTMLCookies := TBcIEDHTMLBehaviorsCookies.Create(nil); MozillaDOM := TBcMozillaDOMStorageCookies.Create(nil); //SafariCookies := TBcSafariCookies.Create(nil); TempCookies := TBcMultiCookieHolder.Create(nil); for iFile := 0 to Files.Count -1 do begin TempCookies.Clear; if FDebugMode then begin Log.Add(DateTimeToStr(now) + #9 + 'Save' + #9 + IntToStr(Integer(Files[iFile].Format)) + #9 + Files[iFile].FileName + '(start)' + #9 + IntToStr(iFile + 1) + '/' + IntToStr(Files.Count)); Log.SaveToFile(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_DESKTOP)) + 'CookieCrumbler.log'); end; for iCookie := 0 to Cookies.Count -1 do begin if StrToInt(Cookies[iCookie].Source) = iFile then TempCookies[TempCookies.Add].Assign(Cookies[iCookie]); end; case Files[iFile].Format of cfFirefox: begin FirefoxCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do FirefoxCookies[FirefoxCookies.Add].Assign(TempCookies[iCookie]); FirefoxCookies.SaveToFile(Files[iFile].FileName); end; cfFlash: begin FlashCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do FlashCookies[FlashCookies.Add].Assign(TempCookies[iCookie]); FlashCookies.SaveToDirectory(Files[iFile].FileName); end; cfChrome: begin ChromeCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do ChromeCookies[ChromeCookies.Add].Assign(TempCookies[iCookie]); ChromeCookies.SaveToFile(Files[iFile].FileName); end; cfIE: begin IECookies.Clear; for iCookie := 0 to TempCookies.Count -1 do IECookies[IECookies.Add].Assign(TempCookies[iCookie]); IECookies.SaveToDirectory(Files[iFile].FileName, True); end; cfIEDHTML: begin IEDHTMLCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do IEDHTMLCookies[IEDHTMLCookies.Add].Assign(TempCookies[iCookie]); IEDHTMLCookies.SaveToDirectory(Files[iFile].FileName); end; cfMozilla: begin MozillaCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do MozillaCookies[MozillaCookies.Add].Assign(TempCookies[iCookie]); MozillaCookies.SaveToFile(Files[iFile].FileName); end; cfMozillaDOM: begin MozillaDOM.Clear; for iCookie := 0 to TempCookies.Count -1 do MozillaDOM[MozillaDOM.Add].Assign(TempCookies[iCookie]); MozillaDOM.SaveToFile(Files[iFile].FileName); end; {cfSafari: begin SafariCookies.Clear; for iCookie := 0 to TempCookies.Count -1 do SafariCookies[SafariCookies.Add].Assign(TempCookies[iCookie]); SafariCookies.SaveToFile(Files[iFile].FileName); end; } end; if FDebugMode then begin Log.Add(DateTimeToStr(now) + #9 + 'Save' + #9 + IntToStr(Integer(Files[iFile].Format)) + #9 + Files[iFile].FileName + '(end)' + #9 + IntToStr(iFile + 1) + '/' + IntToStr(Files.Count)); Log.SaveToFile(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_DESKTOP)) + 'CookieCrumbler.log'); end; end; TempCookies.Free; MozillaCookies.Free; FirefoxCookies.Free; FlashCookies.Free; ChromeCookies.Free; IECookies.Free; IEDHTMLCookies.Free; MozillaDOM.Free; //SafariCookies.Free; end;
Delphi-Quellcode:
type
... TBcFirefoxCookies = class(TBcHTTPCookies) protected procedure SetCookie(Index: Integer; Value: TBcFirefoxCookie); function GetCookie(Index: Integer):TBcFirefoxCookie; function PrimaryKeyIsUnique(Value: Int64; ExceptItem: Integer):Boolean; public function Add:Integer; procedure LoadFromFile(FileName: String); procedure SaveToFile(FileName: String); property Cookies[Index: Integer]: TBcFirefoxCookie read GetCookie write SetCookie; default; end; ... {$WARNINGS OFF} TBcCookie = class(TPersistent) private FName: String; FContent: String; FDomain: String; FPath: String; FExpires: TDateTimeEx; FSecure: LongBool; FWholeDomain: LongBool; FLastAccessed: TDateTimeEx; FCreated: TDateTimeEx; FFlags: Int64; FData: String; FFileName: String; FOwner: String; protected procedure SetLastAccessed(Value: TDateTimeEx); procedure SetCreated(Value: TDateTimeEx); procedure SetExpires(Value: TDateTimeEx); property Secure: LongBool read FSecure write FSecure; property WholeDomain: LongBool read FWholeDomain write FWholeDomain; property LastAccessed: TDateTimeEx read FLastAccessed write SetLastAccessed; property Created: TDateTimeEx read FCreated write SetCreated; property Flags: Int64 read FFlags write FFlags; property Name: String read FName write FName; property Content: String read FContent write FContent; property Domain: String read FDomain write FDomain; property Path: String read FPath write FPath; property Expires: TDateTimeEx read FExpires write SetExpires; property Data: String read FData write FData; property FileName: String read FFileName write FFileName; property Owner: String read FOwner write FOwner; public constructor Create; destructor Destroy; procedure Assign(Source: TBcCookie); procedure AssignTo(Dest: TBcCookie); end; {$WARNINGS ON} TBcHTTPCookie = class(TBcCookie) public function IsBroken:Boolean; function IsExpired:Boolean; published property Name; property Content; property Domain; property Path; property Expires; end; TBcMozillaCookie = class(TBcHTTPCookie) published property Secure; property WholeDomain; end; TBcFirefoxCookie = class(TBcMozillaCookie) published property LastAccessed; property Created; end; ... { TBcFirefoxCookies } procedure TBcFirefoxCookies.SetCookie(Index: Integer; Value: TBcFirefoxCookie); begin FCookies[Index] := Value; end; function TBcFirefoxCookies.GetCookie(Index: Integer):TBcFirefoxCookie; begin Result := FCookies[Index] as TBcFirefoxCookie; end; function TBcFirefoxCookies.Add:Integer; var NewCookie: TBcFirefoxCookie; begin NewCookie := TBcFirefoxCookie.Create; Result := FCookies.Add(NewCookie); end; function TBcFirefoxCookies.PrimaryKeyIsUnique(Value: Int64; ExceptItem: Integer):Boolean; var iCookie: Integer; begin Result := True; for iCookie := 0 to Count -1 do begin if (iCookie <> ExceptItem) and (Cookies[iCookie].Created.AsPRTime = Value) then begin Result := False; Break; end; end; end; procedure TBcFirefoxCookies.LoadFromFile(FileName: string); var db: TSQLiteDatabase; table: TSQLIteTable; begin Clear; db := TSQLiteDatabase.Create(FileName); try if db.TableExists('moz_cookies') then begin table := db.GetTable('SELECT id, name, value, host, path, expiry, isSecure, isHTTPOnly, lastAccessed FROM moz_cookies'); try while not table.EOF do begin with Cookies[Add] do begin Name := table.FieldAsString(table.FieldIndex['name']); Content := table.FieldAsString(table.FieldIndex['value']); Domain := table.FieldAsString(table.FieldIndex['host']); Path := table.FieldAsString(table.FieldIndex['path']); Expires.AsUnixTime(StrToInt64(table.FieldAsString(table.FieldIndex['expiry']))); Secure := LongBool(StrToIntDef(table.FieldAsString(table.FieldIndex['isSecure']), 0)); WholeDomain := LongBool(StrToIntDef(table.FieldAsString(table.FieldIndex['isHTTPOnly']), 0)); LastAccessed.AsPRTime(StrToInt64(table.FieldAsString(table.FieldIndex['lastAccessed']))); Created.AsPRTime(StrToInt64(table.FieldAsString(table.FieldIndex['id']))); end; table.Next; end; finally table.Free; end; end; finally db.Free; end; end; procedure TBcFirefoxCookies.SaveToFile(FileName: string); var db: TSQLiteDatabase; iCookie: Integer; ExpiresStr: String; LastAccessedStr: String; IsUnique: Boolean; begin db := TSQLiteDatabase.Create(FileName); try if db.TableExists('moz_cookies') then db.ExecSQL('DROP TABLE moz_cookies'); db.ExecSQL('CREATE TABLE moz_cookies (id INTEGER, name TEXT, value TEXT, host TEXT, path TEXT, expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHTTPOnly INTEGER, PRIMARY KEY(id))'); for iCookie := 0 to Count -1 do begin //sicherstellen das der Primärschlüssel nur einmal vorkommt IsUnique := PrimaryKeyIsUnique(Cookies[iCookie].Created.AsPRTime, iCookie); while not IsUnique do begin Cookies[iCookie].Created.AsPRTime(Cookies[iCookie].Created.AsPRTime + 1000000); IsUnique := PrimaryKeyIsUnique(Cookies[iCookie].Created.AsPRTime, iCookie); end; //sicherstellen das alle anderen Integer-Werte ungleich dem Primärschlüssel sind LastAccessedStr := IntToStr(Cookies[iCookie].LastAccessed.AsPRTime); if Cookies[iCookie].Created.AsPRTime = Cookies[iCookie].LastAccessed.AsPRTime then LastAccessedStr := IntToStr(Cookies[iCookie].LastAccessed.AsPRTime + 1000000); ExpiresStr := IntToStr(Cookies[iCookie].Expires.AsUnixTime); if Cookies[iCookie].Created.AsPRTime = Cookies[iCookie].Expires.AsUnixTime then ExpiresStr := IntToStr(Cookies[iCookie].Expires.AsUnixTime + 1000000); db.ExecSQL('INSERT INTO moz_cookies (id, name, value, host, path, expiry, lastAccessed, isSecure, isHTTPOnly)' + ' VALUES ("' + IntToStr(Cookies[iCookie].Created.AsPRTime) + '", "' + EscapeSQLStatement(Cookies[iCookie].Name) + '", "' + EscapeSQLStatement(Cookies[iCookie].Content) + '", "' + EscapeSQLStatement(Cookies[iCookie].Domain) + '", "' + EscapeSQLStatement(Cookies[iCookie].Path) + '", "' + ExpiresStr + '", "' + LastAccessedStr + '", "' + IntToStr(LongBoolToInt(Cookies[iCookie].Secure)) + '", "' + IntToStr(LongBoolToInt(Cookies[iCookie].WholeDomain)) + '")'); end; finally db.Free; end; end; |
![]() |
Delphi 2009 Professional |
#42
![]() ![]() Weil dieses "GetTable" mich irgendwie ankotzt, da man kein Objekt zurückgeben sollte.
![]() ![]() ![]() Es waren 4 "gefährliche"... Also Durchschnittlich 3 Sekunden pro Cookie! Dürfte man denn in die Unit gucken?
![]() ![]() ![]() Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich? MfG xZise
Fabian
|
![]() |
Andreas L.
|
#43
![]() Ehm Mist
![]() ![]() ![]() ![]() Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich?
|
![]() |
Delphi XE Professional |
#44
![]() Welche Windows-Version hast du? Evtl. eine englische Ausgabe? Kann mir das nicht erklären.
Thomas
|
![]() |
Delphi 10.3 Rio |
#45
Schönes Programm,
Habe aber einen Fehler gefunden. Nach dem ich das update ausgelöst hatte. Und es will sich nicht mehr beenden es ist hängen geblieben Gruss Sascha |
![]() |
Andreas L.
|
#46
![]() Für so was verwende ich madexcept, damit ich schnell die Fehlerstelle im Code finde.
![]() ![]() Habe aber einen Fehler gefunden.
Nach dem ich das update ausgelöst hatte. Und es will sich nicht mehr beenden es ist hängen geblieben Danke fürs testen ![]() |
![]() |
Delphi 2009 Professional |
#47
![]() ![]() Ehm Mist
![]() ![]() ![]() ![]() Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich?
Und das mit Commit machst du so:
Delphi-Quellcode:
Es ist QUASI das gleiche wie BeginUpdate/EndUpdate, mit dem Unterschied, dass du es hier leider nur einmal ausführen darfst. Imho nicht gerade gut gelöst
db := TSQLiteDatabase.Create;
try db.BeginTransaction; try // Hier die Änderungen übertragen finally db.Commit; end; finally db.Free; end; ![]() MfG xZise
Fabian
|
![]() |
Delphi XE2 Professional |
#48
nach dem Update bekomme ich nun immer
![]() ---------------------------
CookieCrumbler --------------------------- Error executing SQL. Error [1]: SQL error or missing database. "SELECT domain, key, value, secure, owner FROM webappsstore": no such table: webappsstore. --------------------------- OK --------------------------- Danach klicke ich auf Cookie Editor und er aktualisiert sich doch irgendwie, das Problem das beim Beenden auftritt wurde ja auch schon erwähnt ...
Uwe
|
![]() |
Andreas L.
|
#49
Hi Corpsman,
danke fürs testen ![]() Sämtliche Fehler sollten in Version 1.3 behoben sein. Bis Sonntag werde ich die neue Version wohl fertig haben. ![]() |
![]() |
Andreas L.
|
#50
Neue Version im ersten Beitrag
![]() Changelog Version 1.3.7 - 12.07.2009 [+]Zusammenfassung mit ![]() [+]Regeln können jetzt direkt im Bereinigen/Einstellungen Dialog bearbeitet werden [#]Die Bereinigenroutine funktioniert jetzt problemlos, es wird wirklich alles gelöscht was weg muss. Hab das in unzähligen Konstellationen getestet!!! [#]Speichern sollte jetzt 50 % schneller sein und nicht mehr hängen bleiben [+]Fortschrittsanzeige beim Speichern [#]Änderungen können jetzt jederzeit gespeichert werden, man kann außerdem die Änderungen verwerfen (d. h. die Original-Daten laden) [#]Schönheitsfehler behoben [#]Updateprogramm vollständig überarbeitet [+]In der Statusleiste des Cookie-Editors wird die Anzahl der Cookies angezeigt |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |