Der IE frisst meine POST (-Daten)
Alex W
- browser
Hallo zusammen,
ich stehe mal wieder vor einem sehr seltsamen IE Problem.
Ich verwende auf meinem Apache2 das sspi_auth_module Module um Benutzer zu authentifizieren.
Die Authentifizierung findet aber nur über eine bestimmte URL statt.
Meine Virtual Host sieht so aus:
<VirtualHost *:8007>
DocumentRoot C:/dev/xampp/htdocs/Entwicklung/intranet
ServerName ko006wxp-dev.XY.local
ErrorDocument 401 /index.php?id=30
<LocationMatch /fakelogin.php>
AuthName "Intranet"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain korouter.XY.local
SSPIOmitDomain on
SSPIUsernameCase lower
SSPIPerRequestAuth on
SSPIOfferBasic On
require valid-user
</LocationMatch>
</VirtualHost>
Mir ist im IE nun aufgefallen das irgendwie alle Formulare nicht mehr funktionieren, es kommen einfach keine Daten mehr an.
Nach etwas debuggen fand ich raus, dass der IE6,7 und 8 keine POST-Daten mehr schicken sobald auf dem virtuellen Server eine NTML Authentifizierung durchgeführt wurde. Es wird stattdessen nur das Authorization Feld im Header gesetzt. Das ganze passiert solange bis man alle Browserinstanzen schließt. Danach geht es wieder solange bis eine NTML Authentifizierung durchgeführt wird.
Der Testablauf sah wie folgt aus:
1. Testskript http://ko006wxp-dev:8007/test.php aufrufen und Formular abschicken
Post-Request:
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://ko006wxp-dev:8007/test.php
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Content-Length: 55
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: fe_typo_user=183b5293bbb5e579f09a914142210c98
logintype=logout&pid=5&tx_felogin_pi1%5Bnoredirect%5D=0
2. Skript http://ko006wxp-dev:8007/fakelogin.php aufrufen und Authentifizierung durchführen,
3. Wieder das Testskript http://ko006wxp-dev:8007/test.php aufrufen und das gleiche Formular noch mal senden
Post-Request:
POST /test.php?id=123 HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://ko006wxp-dev:8007/test.php
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: fe_typo_user=183b5293bbb5e579f09a914142210c98
Authorization: NTLM TlZMRVNTUAABAAAAB7IIogUABQAwZZZZCAAIACgAAAAFASgKAAAAD0tPMDA2V1hTS1ZRTZA
Wie man sieht sind beim erneuten POST die Daten auf einmal weg...
Was mich total wundert ist, das die test.php ja eigentlich nichts mit dem sspi Module zu tun hat, da es ja in der Location Direktive steht.
Hat jemand eine Idee wo die Ursache dafür liegen könnte oder wie man das Problem lösen kann?
Danke für eure Zeit
Alex
Gelöst
Es muss <Location/fakelogin.php> heißen...
ich Ochse...
Komisch nur das nur der IE das Problem hatte...
Grüße
Alex
Ich nehme alles zurück...
komsicherweise habe ich heute morgen, nach einem Neustart des Rechners, wieder das gleiche Problem.
Was kann das denn bloß sein?
Kann es vielleicht daran liegen, dass ich zu Testzwecken xampp verwende?`
Grüße
Alex
Ich glaube zwar nicht da es jemanden interessiert aber hier ist die Lösung:
It's a feature, not a bug.
Folgende Einstellungen ändern und es geht
Registry:
Type: DWORD
Key: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/DisableNTLMPreAuth
Value: 1
Zusätzlich sind folgende Einstellung am InternetExplorer nötig.
Zusätzlich zu den Registrierungsschlüssel müssen Sie auch Integrierte Windows-Authentifizierung aktivieren in Internet Explorer deaktivieren. Gehen Sie hierzu folgendermaßen vor:
Starten Sie Internet Explorer.
Klicken Sie auf Extras , Internet Optionen , und klicken Sie dann auf die Registerkarte Erweitert .
Klicken Sie unter Sicherheit auf, deaktivieren Sie Integrierte Windows-Authentifizierung aktivieren (Neustart erforderlich) , und klicken Sie dann auf Übernehmen .
Schließen Sie Internet Explorer.
Ich hoffe es nützt jemanden
Grüße
Alex
Hi!
Key: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/DisableNTLMPreAuth
Was es nicht alles gibt, NTLMPreAuth. Könnte ein Grund sein, warum der IE ohne einen 401er einen Authorization-Header mitsendet.
Zusätzlich zu den Registrierungsschlüssel müssen Sie auch Integrierte Windows-Authentifizierung aktivieren in Internet Explorer deaktivieren.
Dann macht der aber gar kein NTLM mehr. Zusammen mit "SSPIOfferBasic On" kannst du nun NTLM-Auth auch ganz gegen Basic-Authentication eintauschen.
Lo!
Hi,
Dann macht der aber gar kein NTLM mehr. Zusammen mit "SSPIOfferBasic On" kannst du nun NTLM-Auth auch ganz gegen Basic-Authentication eintauschen.
Das dachte ich eigentlich auch, aber es funktioniert interesanterweise immer noch. Zum debuggen nutze ich das IEHeaders Plugin um mir den HTTP Request und Response anzuschauen.
Auf der Seite wo der Apache die NTML Auth anfordert wird es auch weiterhin gemacht. Ich kann schön sehen wie die Crenditials gesendet werden.
Bei Basic-Authentication müsste dürfte er ja nicht auf der ADS Nutzer prüfen oder?
Bin gerade etwas verwundert, weil du schreibst es dürfte nicht gehen...
Danke und Grüße
Alex
Hi!
Dann macht der aber gar kein NTLM mehr. Zusammen mit "SSPIOfferBasic On" kannst du nun NTLM-Auth auch ganz gegen Basic-Authentication eintauschen.
Das dachte ich eigentlich auch, aber es funktioniert interesanterweise immer noch. Zum debuggen nutze ich das IEHeaders Plugin um mir den HTTP Request und Response anzuschauen.
Auch nach (mindestens IE-)Neustart? Probier mal den Firefox, der kann auch NTLM (nicht NTML).
Lo!
Hi,
Auch nach (mindestens IE-)Neustart? Probier mal den Firefox, der kann auch NTLM (nicht NTML).
So habe gerade mal geschaut und es funktioniert immer noch alles. Der komplette Server und client waren über das Wochenende aus.
Mit Firefox hat es übrigens immer funktioniert, nachdem ich die URL bei zu trusted URIs hinzugefügt hatte daher bin ich ja auch von einem IE Problem ausgegangen.
Ich habe einfach mal die Requests und Respones beim ersten Intranetaufruf angehängt.
Danke und Grüße
Alex
----------------------------------------------------------------------------
GET / HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Cookie: fe_typo_user=f9d1a010c63608735f100aaa66746146
HTTP/1.1 302 Found
Date: Mon, 27 Sep 2010 07:04:06 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
X-Powered-By: PHP/5.2.9
Set-Cookie: fe_typo_user=b238511788348c72ac690c9b9b485a11; path=/
Location: http://ko006wxp-dev:8007/fakelogin.php
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
GET /fakelogin.php HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Cookie: fe_typo_user=b238511788348c72ac690c9b9b485a11
HTTP/1.1 401 Authorization Required
Date: Mon, 27 Sep 2010 07:04:06 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
WWW-Authenticate: NTLM
X-Powered-By: PHP/5.2.9
Set-Cookie: fe_typo_user=3d10eede7f81f57f73f730ffc2c33c5e; path=/
Content-Length: 3076
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
GET /fakelogin.php HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Authorization: NTLM TlRMTVNTUAABBBBAAB7IIogUABQAwAAAACAAIACgAAAAFASgKAAAAD0tPMDA2V1hQS1ZSTFA=
Cookie: fe_typo_user=3d10eede7f81f57f73f730ffc2c33c5e
HTTP/1.1 401 Authorization Required
Date: Mon, 27 Sep 2010 07:04:07 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
WWW-Authenticate: NTLM TlRMTVNTUAACAAAACgAKADgAAAAFwomi/DO+UpmnQaN45xEAAAAAAIYAhgBCAAAABQEoCgAAAA9LAFYAUgBMAFAAAgAKAEsAVgBSAEwAUAABABAASwBPADAAMAA2AFcAWABQAAQAFgBrAHYAcgBsAHAALgBsAG8AYwBhAGwAAwAoAGsAbwAwADAANgB3AHgAcAAuAGsAdgByAGwAcAAuAGwAbwBjAGEAbAAFABYAawB2AHIAbABwAC4AbABvAGMAYQBsAAAAAAA=
X-Powered-By: PHP/5.2.9
Set-Cookie: fe_typo_user=f74ce22a0f86b20540ed116de77fbad6; path=/
Content-Length: 3076
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
GET /fakelogin.php HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Authorization: NTLM TlRMTVNTUAADAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAABcKIogUBKAoAAAAP
Cookie: fe_typo_user=f74ce22a0f86b20540ed116de77fbad6
HTTP/1.1 200 OK
Date: Mon, 27 Sep 2010 07:04:08 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
X-Powered-By: PHP/5.2.9
Set-Cookie: fe_typo_user=8c751673b771c63f458048f000c9067b; path=/
Content-Length: 2253
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
GET /typo3temp/stylesheet_ea3e27d87a.css?1285252592 HTTP/1.1
Accept: */*
Referer: http://ko006wxp-dev:8007/fakelogin.php
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
If-Modified-Since: Thu, 23 Sep 2010 14:36:32 GMT
If-None-Match: "2000000011a06-1775-490ee30343257"
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Cookie: fe_typo_user=8c751673b771c63f458048f000c9067b
HTTP/1.1 304 Not Modified
Date: Mon, 27 Sep 2010 07:04:08 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
Connection: Keep-Alive
Keep-Alive: timeout=5, max=97
ETag: "2000000011a06-1775-490ee30343257"
GET /typo3temp/javascript_93077bb238.js?1279265819 HTTP/1.1
Accept: */*
Referer: http://ko006wxp-dev:8007/fakelogin.php
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)
Accept-Encoding: gzip, deflate
If-Modified-Since: Fri, 16 Jul 2010 07:36:59 GMT
If-None-Match: "100000001ae37-165-48b7c48b9e2ff"
Host: ko006wxp-dev:8007
Connection: Keep-Alive
Cookie: fe_typo_user=8c751673b771c63f458048f000c9067b
HTTP/1.1 304 Not Modified
Date: Mon, 27 Sep 2010 07:04:08 GMT
Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color mod_auth_sspi/1.0.4 SVN/1.5.4 PHP/5.2.9
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
ETag: "100000001ae37-165-48b7c48b9e2ff"
Hi!
Ich habe einfach mal die Requests und Respones beim ersten Intranetaufruf angehängt.
Sieht aus, als ob es geht. Und diesmal stimmt auch der Vorspann in den NTLM-Messages.
Lo!
Dann macht der aber gar kein NTLM mehr. Zusammen mit "SSPIOfferBasic On" kannst du nun NTLM-Auth auch ganz gegen Basic-Authentication eintauschen.
SSPIOfferBasic ist mittlerweile auf off. Wenn ich ehrlich bin habe ich mir die Einstellung durch try&Error zusammengepuzzelt weil ich keine Doku mit den möglichen Einstellungen gefunden habe.
Weiß jemand wo ich eine gescheite doku finde?
Grüße
Alex
Hi!
Mir ist im IE nun aufgefallen das irgendwie alle Formulare nicht mehr funktionieren, es kommen einfach keine Daten mehr an.
Wie genau hast du das festgestellt? Hast du Kontrollausgaben gemacht, oder etwas anderes?
Nach etwas debuggen fand ich raus, dass der IE6,7 und 8 keine POST-Daten mehr schicken sobald auf dem virtuellen Server eine NTML Authentifizierung durchgeführt wurde. Es wird stattdessen nur das Authorization Feld im Header gesetzt. Das ganze passiert solange bis man alle Browserinstanzen schließt. Danach geht es wieder solange bis eine NTML Authentifizierung durchgeführt wird.
Was genau hast du da debuggt? Im Netzwerk gelauscht?
Der Testablauf sah wie folgt aus:
- Testskript http://ko006wxp-dev:8007/test.php aufrufen und Formular abschicken
Post-Request:
Die Response(s) interessieren dich nicht oder warum führst du sie nicht auf? Schließlich verbraucht so ein NTLM-Geplänkel pro Ressource drei Request-Response-Vorgänge.
- Skript http://ko006wxp-dev:8007/fakelogin.php aufrufen und Authentifizierung durchführen,
NTLM findet zwar bei Schritt 1 nicht statt, aber hier wäre es durchaus nicht uninteressant.
- Wieder das Testskript http://ko006wxp-dev:8007/test.php aufrufen und das gleiche Formular noch mal senden
POST /test.php?id=123 HTTP/1.1
Authorization: NTLM TlZMRVNTUAABAAAAB7IIogUABQAwZZZZCAAIACgAAAAFASgKAAAAD0tPMDA2V1hTS1ZRTZA
Wie kommt es denn nun zu diesem Header seitens des Client? Üblicherweise folgt der auf einen 401er seitens des Servers. Außerdem, wenn man sich mal die Meldung base64-dekodiert fängt sie mit "NVLESSP" an. Mir ist nur bekannt, dass die NTLM-Nachrichten mit "NTLMSSP" anfangen. Das Type-Byte jedenfalls weist das als Type-1-Message aus. Auch ist verwunderlich, dass Google gar nichts zu "NVLESSP" weiß.
Lo!
Wie genau hast du das festgestellt? Hast du Kontrollausgaben gemacht, oder etwas anderes?
Ich habe mir die Requests und Responses mittels IEHttpHeaders anzeigen lassen. Dort sieht man dann folglich auch die POST Daten. Beim Schritt 3 wurden einfach keine POST Daten mehr geschickt.
Ich kann gerne mal die kompletten Requests / Responses posten. Ich habe nur selber nichts interssantes darin gefunden und sie deshalb der übersichtshalber rausgelassen.
Wenn Du möchtest kann ich sie gerne am Montag posten. Bin gerade unterwegs und habe keinen Zugriff auf meinen Versuchtsaufbau.
Danke und viele Grüße
Alex