[php] dynamische frameset wil niet met http_referrer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Op dit moment heb ik via een eenvoudig javascriptje een test aangezet die checkt of de pagina wel binnen de frames wordt opgeroepen:

code:
1
2
3
if (top == self) {
self.location.href = "frames.php";
}


Vervolgens wilde ik in PHP via de var $HTTP_REFERRER het bedoelde frame oproepen. Daar gaat het echter mis, want die var heeft geen inhoud:

PHP:
1
echo $HTTP_SERVER_VARS["HTTP_REFERER"];


Is er wellicht een andere wijze voor deze gedachtengang, anders dan via een vraagteken de URL mee te sturen? Dat laatste vind ik niet mooi vanwege de lange URL, die beginners wellicht verwart.

Vervolgens wil ik dan via een explode-commando checken of de referer wel van mijn site afkomt, om te voorkomen dat iedere oproep van de framespagina leidt tot het invoegen van de vorige site in het inhoudelijke frame.

[ Voor 6% gewijzigd door TromboneFreakus op 08-08-2003 14:23 . Reden: er miste een aanhalingsteken in het javascript en php-code niet goed omsloten met haakjes ]


Acties:
  • 0 Henk 'm!

Verwijderd

frames zuigen opzich al..... maar als je ze in combinatie met referer gebruikt zou ik er maar niet van uitgaan dat dat overal netjes werkt.
erg onbetrouwbaar spul dat referer. Veel browsers geven ze al niet goed mee. en met frames hebben ze er nog meer problemen mee.

Acties:
  • 0 Henk 'm!

  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
De browser geeft bij een javascript location.href geen HTTP_REFERER. Is dus een browser fout waar niks aan te doen is.

/me weet geen leuke quote voor in zijn signature


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
TromboneFreakus schreef op 08 augustus 2003 @ 14:17:Is er wellicht een andere wijze voor deze gedachtengang, anders dan via een vraagteken de URL mee te sturen? Dat laatste vind ik niet mooi vanwege de lange URL, die beginners wellicht verwart.
Het is wel de meest betrouwbare methode. Voor de waarde van de referer ben je overgeleverd aan de gratie van de browser/firewall.

Overigens wordt de methode die je noemt in de praktijk best vaak gebruikt.
Voorbeeld: http://msdn.microsoft.com/nhp/default.asp?contentid=28000546.
Kan me niet voorstellen dat mensen daarvan in de war raken.

Het kan trouwens ook zonder vraagteken. Zoek daarvoor op got of bij google even naar het toverwoord 'multiviews'. Tip: als je een frameset met een pagina content.php wilt openen, kan je met multiviews in plaats van:
http://www.server.nl/frameset.php?content=content.php
De volgende url maken:
http://www.server.nl/frameset/content.php
...terwijl onder water nog steeds frameset.php wordt opgevraagd. :9

[ Voor 24% gewijzigd door bigtree op 08-08-2003 14:44 . Reden: multiviews-methode toegevoegd ]

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je kunt ook een verborgen formpje opnemen, daar het url in zetten en dat posten.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Woeitje, dat het niet werkt i.c.m. frames zou goed kunnen, maar de situatie is dat een pagina die nog NIET in frames wordt weergegeven de REFERER is, zodat deze alsnog in frames geladen kan worden. Daarna kan ik me voorstellen dankzij de vele pagina's die tegelijk worden opgeroepen, dat het met de referer mis gaat.

KnoppenSpook, jammer dat het niet lijkt te kunnen. Of heb je wellicht een andere suggestie? Is het bijv. mogelijk via een form te voorkomen dat de URL zo lang wordt, of is een form niet self-submitting te maken?

Acties:
  • 0 Henk 'm!

Verwijderd

Kijk 's hierzo:
http://www.scriptasylum.c...direct/frameredirect.html

Hier ben ik mee aan de gang gegaan, en met wat aanpassingen werkt het hier perfect, in combinatie met dynamische pages.

[ Voor 12% gewijzigd door Verwijderd op 08-08-2003 14:43 ]


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Verwijderd schreef op 08 August 2003 @ 14:42:
Kijk 's hierzo:
http://www.scriptasylum.c...direct/frameredirect.html

Hier ben ik mee aan de gang gegaan, en met wat aanpassingen werkt het hier perfect, in combinatie met dynamische pages.
Bedankt voor deze tip, maar het feitelijk in frames laden doe ik liever met php, zodat niet te zien is dat er code gebruikt en welke code gebruikt wordt. Bovendien weet ik dan zekerder dat een bannerfilter geen roet in het eten gooit.

Acties:
  • 0 Henk 'm!

Verwijderd

TromboneFreakus schreef op 08 August 2003 @ 14:45:
[...]


Bedankt voor deze tip, maar het feitelijk in frames laden doe ik liever met php, zodat niet te zien is dat er code gebruikt en welke code gebruikt wordt. Bovendien weet ik dan zekerder dat een bannerfilter geen roet in het eten gooit.
Doe ik ook, maar heb dit als basis gepakt. (om de een of andere reden werkt het ineen keer niet meer, maar komt omdat ik er nog volop mee bezig ben).
edit:

heb 'm weer aan de praat


Stukje php die dynamisch een page maakt:
code:
1
2
3
4
5
6
7
8
<?php
$Title=$HTTP_GET_VARS['title']; 
$Content=$HTTP_GET_VARS['content']; 
echo "\n\n<script language=".'"'."javascript".'"'.">\n";
echo "if(self.location==top.location)self.location=".'"'."../index.php?
        type=gal&title=$Title&content=$Content".'"'.";\n";
echo "</script>";
?>


M'n index page
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$content="algemeen/home";
 $title="Home";
 $type="";
 if (!empty($HTTP_GET_VARS)){ 
    $content=$HTTP_GET_VARS['content'];
    $title=$HTTP_GET_VARS['title'];
    $type=$HTTP_GET_VARS['type'];
 }
 $url="php/$type"."page.php?type=$type&title=$title&content=$content";
 echo "<td width=710><iframe name='content' scrolling=no MARGINWIDTH=0 
           MARGINHEIGHT=0 width=100% height=100% frameborder=0  
          src='$url'>Your Browser Does Not Support IFrames</iframe></td>";
 ?>


Let op, ik ben hier geen expert in, ben er net mee begonnen met dat dynamische gebeuren. (en php in het algemeen)

[ Voor 113% gewijzigd door Verwijderd op 08-08-2003 15:09 ]


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Ik heb nu dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<head>

<script>
function framecheck() {
    if (top == self) {
        document.forms[0].submit();
    }
}
</script>

<body onload="javascript:framecheck();">

<script>
document.write('<form action="verwijzing.php" method="post">');
document.write('<input type="hidden" name="url" value="' + self.location.href + '">');
document.write('</form>');
</script>

</body>
</html>


En dan:

PHP:
1
2
3
4
5
6
7
8
9
10
<html>
<body>
<?php

echo $url;


?>
</body>
</html>


Dit gaat goed, maar de javascript-code wordt opeens wel lomp, juist ook omdat ik zowel head als body daarmee moet vullen. Enig idee voor een alternatief daarvoor?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

TromboneFreakus schreef op 08 August 2003 @ 15:02:
[...]
Enig idee voor een alternatief daarvoor?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function framecheck() {

  if (window.top == window.self) {

    var f = document.createElement('form');
    f.style.visibility = 'hidden';
    f.action = 'verwijzing.php';
    f.target = '_top';
    f.method = 'post';
    var i = document.createElement('input');
    i.type = 'text';
    i.name = 'url';
    i.value = window.location.href;
    f.appendChild(i);
    document.body.appendChild(f);
    f.submit();

  }

}

window.onload = framecheck;


een ander alternatief zou een hidden link zijn; die kan je met de click() method activeren, en dan wordt de referrer normaal gesproken wel meegezonden. Echter is dat voor zover ik weet IE-only, en er zijn ook browsers en anti-virus paketten waarmee de referrer uitgeschakeld kan worden.

[ Voor 6% gewijzigd door crisp op 10-08-2003 01:13 . Reden: target toegevoegd ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
crisp schreef op 08 August 2003 @ 15:57:
[...]
er zijn ook browsers en anti-virus paketten waarmee de referrer uitgeschakeld kan worden.
Exactly my point. Javascript zou ik alleen gebruiken om te checken of het huidige frame het topframe is, en zo niet dan doorsturen naar een frameset met als parameter de pagina die in het content-frame moet komen. Dat dit in een url zonder vraagteken kan, beschreef ik hierboven al; met multiviews dus.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 14-09 21:45
Laten we maar hopen dat er een keer een betere variant op de http_referer waarmee je o.a. kan checken vanwaar de gebruiker komt. Het is zeer onhandig dat het zo slecht werkt als je je bestanden wilt beschermen tegen hotlinken e.d.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
maartenvdv schreef op 08 augustus 2003 @ 20:25:
Laten we maar hopen dat er een keer een betere variant op de http_referer waarmee je o.a. kan checken vanwaar de gebruiker komt. Het is zeer onhandig dat het zo slecht werkt als je je bestanden wilt beschermen tegen hotlinken e.d.
Mjah, lijkt me niet echt mogelijk om daar een perfect sluitend gebeuren van te maken. Het is namelijk state inbouwen op een stateless protocol. Het lijkt me makkelijker om stateless te gebruiken op een state enabled protocol.

Voor je state ben je nu afhankelijk van je client om dat te onthouden (omdat de server geen state bijhoud) Als je dit gaat verplaatsten naar de server of door bijv een openstaande connectie, verander je dingen in het protocol zodanig dat de state controlled wordt :)

Acties:
  • 0 Henk 'm!

Verwijderd

met een javascriptje doorlinken:
location.href = 'http://www.server.com/jeframesscript/' + location.href

en dan een .htaccess aanmaken (er vanuit gaande dat je apache gebruikt):
code:
1
2
3
<Files jeframesscript>
ForceType application/x-httpd-php
</Files>


en dan een nieuw php script maken dat jeframesscript heet (zonder extensie), en daarin zet je dan (ongeveer):
PHP:
1
2
3
4
$nav = ereg_replace('^'.$_SERVER["SCRIPT_NAME"], "", $_SERVER["REQUEST_URI"]); 
$vars = explode("/", $nav);
$oorspronkelijkeURL = $vars[1];
maakEenFramesSite($oorspronkelijkeURL);


en die laatste functie mag je zelf verzinnen :P

Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Crisp, hartelijk dank voor je complete en duidelijke Javascript-code.

Nu kan ik het geheel eenvoudig terugbrengen tot een regel in de head en ik ben klaar.

code:
1
<script src="verwijzing.js"></script>

Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
En voor de mensen die hier komen via de search, even de werkende (vereenvoudigde) php-code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<head><title>Frames</title></head>

<frameset rows="*,425,*" framespacing="0" border="0" frameborder="0">
  <frame name="zwart" src="" scrolling="no" noresize marginwidth="0" marginheight="0">

<?php
echo "<frame name=\x22inhoud\x22 src=\x22".$url."\x22>";
?>

  <frame name="zwart" src="" scrolling="no" noresize marginwidth="0" marginheight="0">

  <noframes>
  <body>
    Bla bla... een heeeele oude browser

        </body></noframes>

</frameset>
</html>

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

TromboneFreakus schreef op 09 August 2003 @ 21:27:
Crisp, hartelijk dank voor je complete en duidelijke Javascript-code.

Nu kan ik het geheel eenvoudig terugbrengen tot een regel in de head en ik ben klaar.

code:
1
<script src="verwijzing.js"></script>
zet er ook even een type="text/javascript" bij voor HTML conformance :)

[ Voor 3% gewijzigd door crisp op 10-08-2003 01:15 ]

Intentionally left blank

Pagina: 1