[PHP] Iframes en Internet Explorer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Ik heb weer wat bij de hakken waar ik niet uit kom. Ik heb het probleem gereduceerd tot de volgende toch heel simpele pagina's..
PHP: 1.PHP
1
2
3
4
5
6
  session_start();

  $_SESSION['Test'] = "Een test string";
  $_SESSION['Final'] = "De laatste";

  header ("Location: http://www.eendomein.nl/2.php");

PHP: 2.PHP
1
2
3
  session_start();

  header ("Location: http://www.eendomein.nl/3.php");

PHP: 3.PHP
1
2
3
4
  session_start();

  echo "File 3.php";
  print_r($_SESSION);


Het goede nieuws, roep ik 1.php aan dan worden de variabelen netjes in 3.PHP afgedrukt. Ik had de re-direct naar 2 ook direct naar 3 kunnen laten wijzen ... het probleem blijft hetzelfde. Nu het probleem:
HTML: index.php
1
2
3
4
5
6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>Test</title></head><body>

<iframe src="http://www.eendomein.nl/1.php" style="border:5px; padding:5px; width:400px; height:200px;"></iframe>

</body></html>

Deze file staat locaal op een PC maar kan ook elders staan, maar niet op de server! Het probleem is nu dat er geen variabelen in IE worden afgedrukt maar wel in Opera en Firefox?

Opera / Firefox:
File 3.phpArray ( [Test] => Een test string [Final] => De laatste )


IE:
File 3.phpArray ( ) 


Heeft er iemand een idee hoe dit op te lossen ?

[ Voor 3% gewijzigd door hamsteg op 09-01-2007 10:58 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Kijk even voor de zekerheid of je _SESSION cookie wel is aangemaakt in IE. Is althans het eerste wat mij te binnen schiet.

test1: Als ik jouw scripts hier uitvoer onder IE6 (allemaal op dezelfde server) werkt het prima in FF en IE
test2: Ook vanaf een andere server werkt het prima...

[ Voor 41% gewijzigd door Yo-han op 09-01-2007 11:14 . Reden: test resultaat ]


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Yep alles op 1 server dat werkt wel, alleen daar gaat het juist om. De HTML file staat elders. Het werkt ook niet met :

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
<frameset cols="30%,*">
<frame src="menu.html">
<frame src="http://www.eendomein.nl/1.php">
</frameset>
</html>


Dus PHP files staan op: www.eendomein.nl
De HTML files staan op gewoon de locale PC (dus niet op www.eendomein.nl).

IE 6.0.xxx / Opera 9.10 / Firefox: 1.5.0.7

[ Voor 12% gewijzigd door hamsteg op 09-01-2007 11:20 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

Verwijderd

de session wordt waarschijnlijk pas afgesloten nadat er een redirect plaatsvind.

misschien helpt het als je deze functie voor de redirect aanroept?

PHP:
1
session_write_close();

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Het was inderdaad netter geweest dit wel te doen (de session_write_close(); voor de header te zetten) maar dat is niet de oplossing :( Daarbij, het gaat alleen fout bij IE, dat heeft niets met server-side handling te maken.

[ Voor 24% gewijzigd door hamsteg op 09-01-2007 11:37 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

Verwijderd

is dit niet gewoon een security issue van IE, die cookies van andere domeinnamen - anders dan de bezochte domeinnaam - blokkeerd?

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Ik heb net de security dingen bekeken en alles staat op low of allow. Er is inderdaad ergens een setting allow data accross multiple domains maar die staat ook op enabled.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

hamsteg schreef op dinsdag 09 januari 2007 @ 11:55:
Ik heb net de security dingen bekeken en alles staat op low of allow. Er is inderdaad ergens een setting allow data accross multiple domains maar die staat ook op enabled.
Ook als ik je HTML lokaal gebruik om op een server die php bestanden aan te roepen werkt het prima.

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Het lijkt erop dat de header redirect in combinatie met aanroep vanuit een iframe op een ander domain zorgt voor een unset van de sessie variabelen/expiratie van de sessie.

Creeer ik nu een ExternalAccess.php op de server met alleen een iframe en een source naar 1.php dan werkt het geheel wel. Het kan een security issue zijn ... ik kijk nog even verder.

[ Voor 6% gewijzigd door hamsteg op 09-01-2007 13:59 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer onderstaande header eens te laden op de pagina's. Ik heb hetzelfde probleem weleens gehad en dit was de oplossing, schijnt een bug te zijn van IE
PHP:
1
header('P3P: CP="CAO PSA OUR"');


Zie een php.net comment:
http://nl2.php.net/manual/en/ref.session.php#69629

[ Voor 16% gewijzigd door Verwijderd op 09-01-2007 14:06 ]


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Whow, dat ziet er inderdaad zeer belovend uit. Ik maak even de huidige implementatie af (hij werkt maar moet van hack-hack even naar leesbaar) en daarna even hier mee bezig ... laat je horen wat het is geworden !

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
Verwijderd schreef op dinsdag 09 januari 2007 @ 14:04:
Probeer onderstaande header eens te laden op de pagina's. Ik heb hetzelfde probleem weleens gehad en dit was de oplossing, schijnt een bug te zijn van IE
Hail blikjejolt (MIB 2)!

Dat was hem ... een IE bug. Voor de geïnteresseerden en latere probleem hebbers de complete samenvatting van probleem en oplossing:

Links:Complete uitleg voor het geval de links weer veranderen:
SYMPTOMS
If you implement a FRAMESET whose FRAMEs point to other Web sites on the networks of your partners or inside your network, but you use different top-level domain names, you may notice in Internet Explorer 6 that any cookies you try to set in those FRAMEs appear to be lost. This is most frequently experienced as a loss of session state in an Active Server Pages (ASP) or ASP.NET Web application. You try to access a variable in the Session object that you expect to exist, and a blank string is returned instead.

You also see this problem in a FRAMEs context if your Web pages alternate between the use of Domain Name System (DNS) names and the use of Internet Protocol (IP) addresses.

CAUSE
Internet Explorer 6 introduced support for the Platform for Privacy Preferences (P3P) Project. The P3P standard notes that if a FRAMESET or a parent window references another site inside a FRAME or inside a child window, the child site is considered third party content. Internet Explorer, which uses the default privacy setting of Medium, silently rejects cookies sent from third party sites.

RESOLUTION
You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.
De oplossing
Plaats voor de session_start() en voordat er al iets verstuurd is een header die de security settings aanpast:

PHP:
1
2
header('P3P: CP="CAO PSA OUR"');
session_start();

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

hamsteg schreef op woensdag 10 januari 2007 @ 10:18:
[...]
Dat was hem ... een IE bug.
Sinds wanneer is een correcte implementatie van P3P een bug? :?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Topicstarter
crisp schreef op woensdag 10 januari 2007 @ 12:22:
[...]

Sinds wanneer is een correcte implementatie van P3P een bug? :?
Daar gaat het ook niet over, de implementatie is ok met een keline uitzondering: "...setting of Medium, silently rejects ...". Het woordje "silently" is hier van cruciaal belang.

... gecensureerd ...

Pagina: 1