AJAX und Cookies
David
- javascript
0 Klawischnigg0 David0 Klawischnigg0 David
Liebe Foren-Mitglieder,
ich habe da ein AJAX-Problem, zu dem ich nach zwei Stunden basteln und einer Stunde Suche immer noch keine Lösung gefunden habe und hoffe, ihr könnt mir weiterhelfen.
Kann ich, wenn ich per AJAX ein PHP-Skript aufrufe innerhalb des aufgerufenen PHP-Skripts Cookies abfragen? Normalerweise sollten Cookies doch auch bei einem HTTP-Request per AJAX mitgesendet werden, oder? Jedenfalls scheint es aber nicht wie üblich zu funktionieren.
In meinem konkreten Fall möchte ich auch Sicherheitsgründen das Cookie nicht schon auf der Ausgangsseite abfragen und dann eventuell die Cookie-Informationen innerhalb des Ajax-HTTP-Requests übergeben. In diesem Fall könnte nämlich das durch AJAX aufgerufene Skript auch manuell mit manipulierter URL aufgerufen werden.
Konkret verwende ich als AJAX-Framework übrigens SAJAX.
Terminologische Unsicherheiten bitte ich zu entschuldigen. Ich hoffe, das Problem ist einigermaßen verständlich,
Gruß
David
Hi there,
In meinem konkreten Fall möchte ich auch Sicherheitsgründen das Cookie nicht schon auf der Ausgangsseite abfragen und dann eventuell die Cookie-Informationen innerhalb des Ajax-HTTP-Requests übergeben. In diesem Fall könnte nämlich das durch AJAX aufgerufene Skript auch manuell mit manipulierter URL aufgerufen werden.
Das letzte von Dir Geschilderte kann in jedem Fall passieren. Cookies haben, egal wo ausgelesen oder abgerufen, mit Sicherheit eigentlich nie etwas zu tun. Ich würd' an meinem Sicherheitskonzept noch basteln; zu Deinem Problem: Du willst mit Javascript ein Cookie setzen, das Du dann mit PHP ausliest, oder hab ich Dich falsch verstanden?
Hi,
ich habe vereinfacht geschildert zwei Cookies. Eines mit Benutzername, eines mit Passwort. Wie die Cookies gesetzt wurden, ist für mein Problem erstmal nicht so relevant.
Nun will per AJAX eine Abfrage an ein PHP-Skript senden. Dieses benötigt Benutzername und Passwort aus den Cookies. Mein Problem ist es, dass es mir nicht gelingt mit dem PHP-Skript, das per AJAX aufgerufen wird, die Cookies auszulesen. Ohne AJAX ist das Auslesen der Cookies mit demselben Skript problemlos möglich.
Ich könnte auch im Ursprungsskript die Cookies auslesen und dann bei dem AJAX-Aufruf mitsenden. Meiner Einschätzung nach ist das aber doch ein Unterschied bei Sicherheit, da in dem einen Fall das mit AJAX aufgerufene Skript durch falsche URL-Parameter manipuliert werden kann, im letzteren Fall nicht, da das Skript sich die Informationen direkt aus den Cookies holt.
Gruß
David
Hi there,
Ich könnte auch im Ursprungsskript die Cookies auslesen und dann bei dem AJAX-Aufruf mitsenden. Meiner Einschätzung nach ist das aber doch ein Unterschied bei Sicherheit, da in dem einen Fall das mit AJAX aufgerufene Skript durch falsche URL-Parameter manipuliert werden kann, im letzteren Fall nicht, da das Skript sich die Informationen direkt aus den Cookies holt.
Und wie willst Du verhindern, daß ein manipulierter Aufruf einfach das Cookie ausliest?
Und wie willst Du verhindern, daß ein manipulierter Aufruf einfach das Cookie ausliest?
Ich sehe es als unsicherer an, wenn ein Nutzer in einem Aufruf à la test.php?variable=dings einfach den "dings"-Teil verändern kann, als wenn das Betreffende in einem Cookie steht. Natürlich kann man auch Cookies faken, aber das ist eher unwahrscheinlich.
Das ein manipulierter "Aufruf" Cookie-Infos ausliest, kann ich eher ausschließen, da ich hoffentlich sauber genug gecodet habe, um zu verhindern, dass Cookie-Infos im Klartext ausgegeben werden. Natürlich habe ich keine Handhabe dagegen, dass Cookies eines bestimmten Users durch irgendwelche manipulierte Webseiten oder Trojaner ausgelesen werden, aber das ist ein anderes Problem.
Abgesehen davon, was Du von meiner Lösung hälst: Hast Du Ahnung, ob per AJAX aufgerufene PHP-Skripte prinzipiell Cookies auslesen können?
Hi there,
Abgesehen davon, was Du von meiner Lösung hälst: Hast Du Ahnung, ob per AJAX aufgerufene PHP-Skripte prinzipiell Cookies auslesen können?
Ohne es genau zu wissen, aber warum sollte das nicht gehen? Dem PHP-Skript ist es egal, wie es aufgerufen wird, das weiss von AJAX ohnehin nix, es könnte lediglich sein, daß der Browser das Cookie nicht hergibt, wenn es vom Server angefordert wird, aber warum sollte er das ausgerechntet nicht tun, nur weil er eine Ressource per "Ajax" angefordert hat? Vielleicht hast Du ja ein Timing-Problem?
Hi,
Abgesehen davon, was Du von meiner Lösung hälst: Hast Du Ahnung, ob per AJAX aufgerufene PHP-Skripte prinzipiell Cookies auslesen können?
Ohne es genau zu wissen, aber warum sollte das nicht gehen? Dem PHP-Skript ist es egal, wie es aufgerufen wird, das weiss von AJAX ohnehin nix,
Genau - dem serverseitigen Script ist es ganz egal, wer den Request macht.
es könnte lediglich sein, daß der Browser das Cookie nicht hergibt, wenn es vom Server angefordert wird,
Der Server "fordert" keine Cookies an - er bekommt sie vom Client unaufgefordert im Request mitgeschickt.
aber warum sollte er das ausgerechntet nicht tun, nur weil er eine Ressource per "Ajax" angefordert hat? Vielleicht hast Du ja ein Timing-Problem?
Entweder das, oder vielleicht ein Pfad-Problem - dass die per AJAX angeforderte Ressource ausserhalb des Pfades liegt, für den das Cookie gesetzt wurde.
MfG ChrisB
Ich habe das Problem inzwischen gelöst.
Für Interessierte:
Aus irgendeinem mir nicht bekannten Grund funktioniert bei PHP-Skript-Aufrufen mit AJAX nur $_COOKIE[cookiename], nicht aber $HTTP_COOKIE_VARS["cookiename"].
Hi,
Aus irgendeinem mir nicht bekannten Grund funktioniert bei PHP-Skript-Aufrufen mit AJAX nur $_COOKIE[cookiename], nicht aber $HTTP_COOKIE_VARS["cookiename"].
Letzteres ist eh seit Jahren veraltet. (Und ersteres natürlich immer noch fehlerhaft, sofern cookiename keine zuvor definierte Konstante ist.)
Ob der Request per AJAX gemacht wird oder nicht, sollte dabei aber keine Rolle spielen. Vermutlich sprichst du damit ein Script an, für das die Konfiguration hinsichtlich register_long_arrays abweichend ist (bspw. weil es in einem anderen Verzeichnis liegt, wo eine andere Konfiguration vorliegt).
MfG ChrisB