6 Stimmen

IE8 wendet Cookies nicht ordnungsgemäß auf alle Domänen an - nur auf einem Rechner

Ich habe ein interessantes Problem, bei dem ich völlig ratlos bin.

Ich habe einen Produktionscode entwickelt, der ein IBM LTPA-Token-Cookie liest, das von einem von einer anderen Abteilung verwalteten Rechner gesetzt wurde, es validiert und zur Anmeldung bei einem von meiner Gruppe verwalteten System verwendet (indem einige spezielle Cookies gesetzt werden). Dieser Single-Sign-On-Prozess ist für den Endbenutzer völlig transparent und funktioniert in der Produktion seit mehreren Jahren in allen Browsern problemlos.

Vor kurzem habe ich festgestellt, dass es auf meinem Entwicklungsrechner mit IE8 nicht richtig funktioniert. Ich habe vor kurzem ein Upgrade von Vista auf Windows 7 durchgeführt. Ich bin mir nicht sicher, ob es auf meinem Rechner vor oder nach dem Upgrade nicht funktioniert hat, da es etwas ist, das schon so lange funktioniert und ich keinen Grund habe, es regelmäßig zu testen. FireFox 3.5 und Chrome 4 dev auf demselben Rechner funktionieren beide wie erwartet. IE6 auf einem virtuellen XP SP3 auf diesem Rechner funktioniert einwandfrei. IE8 auf mehreren Rechnern zu Hause funktioniert einwandfrei (sowohl Windows Server 2008 als auch Windows 7).

Zu Diagnosezwecken habe ich alle Cache-Daten aus meinem IE8 Dev (WinInet-Cache) gelöscht, um mit einer sauberen Weste zu beginnen. Ich startete Fiddler, um den Prozess zu verfolgen und festzustellen, was nicht funktionierte. Was ich gefunden habe, war ziemlich interessant und ich kann es nicht erklären.

Nach der Anmeldung bei der ursprünglichen Website - nennen wir sie ltpa.domain.com - werden die Sitzungscookies wie erwartet mit dem Set-Cookie-Header vom Server übertragen. Ich überprüfe, ob die Domäne korrekt auf .domain.com eingestellt ist und ob der Pfad / lautet. Bei allen nachfolgenden Anfragen des Browsers nach der Anmeldung werden alle Cookies bei jeder Anfrage erwartungsgemäß wieder auf den Server übertragen. Tatsächlich handelt es sich um ein Portal und es gibt einige zusätzliche Inhalte von, sagen wir, portal.domain.com, die ebenfalls abgerufen werden; alle Cookies werden auch an diesen Server korrekt weitergeleitet.

Nun zum interessanten Teil: Wenn ich eine Anfrage an myserver.domain.com stelle, werden die von ltpa.domain.com gesetzten Cookies auf Domänenebene nicht an myserver.domain.com weitergeleitet, obwohl sie das sollten. Der Single-Sign-On-Prozess leitet automatisch zu ltpa.domain.com zurück, wenn die Cookies fehlen (und schickt ein Cookie an den Client, das der ltpa-Anmeldeprozess zur Weiterleitung verwendet) - das von myserver gesetzte Cookie auf Domänenebene wird nicht zu ltpa.domain.com zurückgeschickt.

Auch hier gilt sólo passiert auf dieser einen Instanz von IE8 auf meinem Entwicklungsrechner, die mir bekannt ist. Dieser Prozess wird tausende Male am Tag mit einer ziemlich großen Benutzerbasis verwendet, und wir haben keine anderen Beschwerden von Endbenutzern erhalten - also kein Hinweis darauf, dass es sich um ein systemisches Problem mit dem IE8 oder etwas Ähnliches handelt.

Ich habe den Eindruck, dass myserver.domain.com und ltpa.domain.com als getrennte Domänen behandelt werden, obwohl sie es nicht sind.

Es gibt zwei interessante Punkte, die erwähnenswert sein könnten - aber es könnte sich um Ablenkungsmanöver handeln, da dies schon immer so war und nie ein Problem verursacht hat.

  • Die DNS ist hier ein bisschen komisch. LTPA.domain.com wird zur externen IP aufgelöst. myserver.domain.com wird jedoch auf die interne IP aufgelöst. Ein Reverse-Lookup für diese IP ergibt den internen DNS-Namen - sagen wir myserver.internal.domain.com. Ich vermutete, dass der IE8 vielleicht eine Art Reverse-Lookup durchführt, um DNS-basierte Angriffe zu verhindern - also änderte ich meine HOSTS-Datei und zeigte myserver.domain.com zu Testzwecken auf die externe IP. Ich überprüfte in Fiddler, dass die Anfragen an die externe IP-Adresse gingen - aber es machte keinen Unterschied bei den Cookies. Sie wurden immer noch nicht weitergeleitet.

  • Zuvor war myserver.domain.com in den WinInet-Sicherheitskonfigurationsseiten des IE unter "Vertrauenswürdige Sites" aufgeführt. Ich habe sie und die eine andere Site, die sich dort befand, entfernt. Nennen wir diesen Rechner my2.domain.com; dieser Rechner erhält zufällig (oder vielleicht auch nicht?) auch keine Domänen-Cookies, die von ltpa.domain.com gesetzt wurden. In diesem Fall brauche ich die Cookies nicht, aber ich habe es trotzdem getestet, um zu sehen, ob dieses Problem auch auf anderen Rechnern auftritt. In der Statusleiste des Internet Explorers werden ltpa.domain.com, portal.domain.com und myserver.domain.com alle unter der Zone "Internet" angezeigt. Seltsam ist, dass my2.domain.com in der Statusleiste immer noch als "vertrauenswürdige Sites" angezeigt wird, obwohl sie nicht im Dialogfeld "Vertrauenswürdige Sites" aufgeführt ist. Ja, ich habe einen Neustart durchgeführt, nachdem ich die Änderungen vorgenommen habe.

Weitere wichtige Punkte.

  • Ich bin mir der anderen Probleme mit IE und Nicht-.com-Domains, zitierten Cookie-Werten und anderen Cookie-Anomalien bewusst, die hier auf Stackoverflow und anderswo im Internet erwähnt wurden. Keines davon trifft zu. Ich habe Eric Laws IEInternals-Artikel über Cookie-Interna durchgelesen -- http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx

  • Im IE sind keine funky Addons aktiviert. Nur Flash, Silverlight, Live ID sign-in helper und Fiddler2.

  • Es gibt keine InPrivate-Regeln zum Herausfiltern von Inhalten, die für meine Domäne spezifisch sind.

  • Da ich einen Laptop verwende, habe ich den IE8 von meinem Heimnetzwerk aus ausprobiert (nach einem Neustart), um DNS-Probleme auszuschließen. Ich erlebe das gleiche Verhalten zu Hause, also ist das DNS-Problem nicht das Problem, soweit ich das beurteilen kann.

  • Ich habe alle IE-Einstellungen mehrfach durchforstet, weil ich dachte, ich hätte vielleicht eine obskure Cookie-Einstellung übersehen. Die Datenschutzeinstellungen sind auf "Mittel" eingestellt, und es gibt keine Websites mit besonderer Behandlung.

  • Bei den Entwicklungswerkzeugen habe ich sichergestellt, dass die Option "Always Refresh From Server" nicht aktiviert ist.

  • Ich glaube nicht, dass ich dies Microsoft melden kann, da ich das Problem nirgendwo anders reproduzieren kann.

An diesem Punkt bin ich also ratlos. Außer der Aktivierung einer Art von Diagnosemodus in IE8, die ich nicht kenne, oder den Code für es zu debuggen... Mir sind die guten Ideen ausgegangen.

Ich denke, dass ich entweder auf einen Fehler gestoßen bin, dass irgendeine Einstellung in der Registrierung oder ähnliches verändert wurde oder dass irgendwo etwas beschädigt wurde.

Irgendwelche Ideen?

3voto

Ethan J. Brown Punkte 2298

Ich glaube, ich habe das Problem hier gefunden.

Das muss ein Fehler im IE sein. Nun, eigentlich zwei, wenn wir Haare spalten wollen.

Obwohl ich myserver.domain.com und my2.domain.com schon sehr früh aus der Liste der vertrauenswürdigen Sites im IE-Sicherheitsdialog gelöscht hatte, blieben diese beiden Sites in der Zonenkonfiguration in der Registrierung erhalten! Ich konnte dies herausfinden, indem ich in der Registrierung nach den Namen meiner Server suchte, und voilà, ein wenig Detektivarbeit war erfolgreich.

Es gibt einen Unterschlüssel unter HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Einstellungen \ZoneMap\Domains

für domain.com

Und unter domain.com blieben zwei Unterschlüssel für die beiden verschiedenen Server, die ich aus dem Dialogfeld "Vertrauenswürdige Sites" gelöscht hatte - beide mit REG_DWORD für den Wert * auf 2 gesetzt. Das bedeutet natürlich, dass die Site zu den vertrauenswürdigen Sites gehört.

Ich konnte einen alten Artikel von 'Scripting Guy' ausgraben, in dem dieser spezielle Schlüssel und die verfügbaren Werte zum Ändern der Zonen beschrieben werden. http://blogs.technet.com/heyscriptingguy/archive/2005/05/02/how-can-i-add-a-site-to-internet-explorer-s-restricted-sites-zone.aspx

Vielleicht sind diese Einstellungen in der Benutzeroberfläche auf irgendeine Weise veraltet, werden aber immer noch gelesen/verwendet? Ich weiß es nicht, aber es gibt eindeutig eine Diskrepanz zwischen dem, was in der Benutzeroberfläche angezeigt wird, und dem, was tatsächlich verwendet wird.

Wie bereits in einem früheren Kommentar erwähnt, zeigte die Statusleiste beim Aufrufen des Roots von myserver.domain.com (was übrigens zu einer 403 vom Server führte) "Internet | Geschützter Modus: Aus" an, was die Verwirrung nur noch vergrößerte, denn es hätte "Vertrauenswürdige Sites | Geschützter Modus" heißen müssen: Aus" heißen sollte.

Die Lösung lautete also entweder

a - löschen Sie die oben angegebenen Registrierungsschlüssel, damit alles in die Internetzone verschoben wird ODER b - fügen Sie *.domain.com zur Liste der vertrauenswürdigen Sites hinzu, so dass alles in die Internetzone verschoben wird

Hoffentlich können Sie diese Probleme dem IE-Team mitteilen, Eric?

Danke, dass Sie mich auf den richtigen Weg gebracht haben!

1voto

EricLaw Punkte 55641

Mit dem Wort "Domäne" muss man sehr vorsichtig umgehen, denn viele Menschen verwenden es für viele verschiedene Dinge.

http://blogs.msdn.com/ieinternals/archive/2009/09/19/Private-Domain-Names-and-Public-Suffixes-in-Internet-Explorer.aspx

Von der Beschreibung her klingt es sehr danach, dass Sie auf Problem Nr. 3 im Abschnitt "Fehlerbehebung bei Anmelde-Cookies" in diesem Beitrag stoßen: http://blogs.msdn.com/ieinternals/archive/2009/09/11/Troubleshooting-Stored-Login-Problems-in-IE.aspx

Sie müssen das Problem der Zone/Integritätsebene lösen, um das Cookie-Problem zu beheben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X