Avatar billede Chewie Novice
18. oktober 2010 - 22:39 Der er 16 kommentarer og
2 løsninger

readfile og URL

Jeg har en PHP fil som bliver loadet med følgende på et andet site:
<?php readfile("http://abc.dk/xxxx.php"); ?>

Kan man skrive noget ind i PHPfilen som viser hvilken URL filen bliver loadet på ?
Avatar billede webweaver Praktikant
18. oktober 2010 - 23:12 #1
Er ikke helt sikker på at jeg forstår dit spørgsmål.
Du kan ikke bare smide $_SERVER['PHP_SELF']; ind på den side som læser filen og så vise det på skærmen? Eller måske sætte det ind i den læste fil?
Avatar billede Chewie Novice
18. oktober 2010 - 23:17 #2
Det virker ikke at sætte $_SERVER['PHP_SELF']; i "http://abc.dk/xxxx.php" filen, nok fordi den bliver loade gennem en readfile

har du andre forslag ?
Avatar billede webweaver Praktikant
18. oktober 2010 - 23:35 #3
Hmm, tror faktisk at det muligvis kunne virke med eval();
Den kan bruges til at eksekvere script i en readfile fx.

http://dk.php.net/manual/en/function.eval.php
Avatar billede Chewie Novice
19. oktober 2010 - 11:08 #4
Mange tak for input - Jeg syns ikke jeg kan få eval() til at virke - kan du komme med et eksempel på hvordan kode kunne se ud ?
Avatar billede n-emy Nybegynder
19. oktober 2010 - 12:53 #5
Jeg lytter lige med her da jeg sidder med et lignende problem =)

Har forsøgt mig med eval også, men kan ikke finde noget eksempel med readfile på php.nets manual.

Har forsøgt noget lignende:

domain.dk/test.php:
$stringname=$_SERVER['HTTP_HOST']; 
print"Hvor du fra, jeg fra $theVarValue";

domain2.dk/test2.php:
readfile("http://www.domain.dk/test.php");

Får bare en string der hedder Hvor du fra, jeg fra domain.dk selvom jeg gerne vil have den til at skrive Hvor du fra, jeg fra domain2.dk
Avatar billede webweaver Praktikant
19. oktober 2010 - 15:58 #6
Synes sgu heller ikke selv at det umiddelbart lige fungerer.
Du har ikke mulighed for at bruge include istedet for readfile fx? Der får du ihvertfald lov til at eksekvere scripts, hvis du vil.
Avatar billede Chewie Novice
19. oktober 2010 - 16:19 #7
include kan jeg ikke bruge på tværs af 2 domæner :(
Avatar billede webweaver Praktikant
19. oktober 2010 - 16:27 #8
Det har du fuldstændig ret i.

Men når du nu ikke kan skrive det PHP ind i den loadede fil, kan du så ikke skrive det ind i den fil som skal vise det? Så vidt jeg forstår på dig, er det også den URL som du skal bruge og den side, det skal vises på?
Avatar billede coderdk Praktikant
19. oktober 2010 - 16:45 #9
<?php readfile("http://abc.dk/xxxx.php?caller=".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); ?>


i xxxx.php skal du så bare udskrive $_GET['caller']
Avatar billede Chewie Novice
19. oktober 2010 - 16:58 #10
Tak coderdk - men den er for nem at hacke :(
Avatar billede Chewie Novice
19. oktober 2010 - 17:02 #11
webweaver - Nej, jeg har kun adgang til at skrive i "http://abc.dk/xxxx.php" filen

Tænkte man måske kunne trække noget serverlog - for serveren ved hvilke filer det bliver loadet hvor
Avatar billede coderdk Praktikant
19. oktober 2010 - 17:13 #12
For nem at hacke? Du kan jo bare sikre den lidt ;)
F.eks.:

<?php

$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$ts = time();
$secret = 'Noget super hemmeligt, kendt på begge servere";
$checksum = md5( md5( $ts ) . $secret );
readfile("http://abc.dk/xxxx.php?caller=".$url."&ts=".$ts."&checksum=".$checksum);

?>

og så på den anden server:

$ts = $_GET['ts'];
$secret = 'Noget super hemmeligt, kendt på begge servere";
$checksum = md5( md5( $ts ) . $secret );

if ( $checksum != $_GET['checksum'] )
{
  header( "403 Forbidden" );
  die( "Request denied" );
}

...noget i den stil ;)
Avatar billede Chewie Novice
02. november 2010 - 20:06 #13
Øv - jeg har endnu ikke fundet en løsningen på dette :(

@coderdk men dit eksempel er det ikke så hemmeligt for der står jo i koden hvad det er (det er ikke mine sider begge to, det som jeg i bund og grund er at se hvor koden bliver brugt "<?php readfile("http://abc.dk/xxxx.php"); ?>")
Avatar billede coderdk Praktikant
02. november 2010 - 23:44 #14
Jeg er ikke sikker på, at jeg forstår. Du kan begrænse lidt?

I dit script:

<?php

$ok_keys = array(
        "21d2ac98c14282d33c063c41b14067f7"
        ,"afdd7b3efede5ab0809684c024eb4e0b"
    );
if ( !empty( $_GET['check'] ) || !in_array( $_GET['check'], $ok_keys ) )
{
  die( "Nøglen er ikke gyldig" );
}

// Resten af dit script her

?>

Så skal du oprette en key i $ok_keys til hvert domæne du giver lov til at kalde dit script, og instruere dem i at de skal kalde scriptet med f.eks.:

<?php readfile( "http://abc.dk/xxxx.php?check=21d2ac98c14282d33c063c41b14067f7" ); ?>
Avatar billede coderdk Praktikant
02. november 2010 - 23:45 #15
Hov

if ( !empty( $_GET['check'] ) || !in_array( $_GET['check'], $ok_keys ) )
{
  die( "Nøglen er ikke gyldig" );
}


skal naturligvis være


if ( empty( $_GET['check'] ) || !in_array( $_GET['check'], $ok_keys ) )
{
  die( "Nøglen er ikke gyldig" );
}
Avatar billede Chewie Novice
04. januar 2011 - 09:12 #16
tak for hjælpen .. smid nogle svar (alle)
Avatar billede coderdk Praktikant
04. januar 2011 - 10:52 #17
:)
Avatar billede webweaver Praktikant
04. januar 2011 - 12:07 #18
Du fik det til at virke? :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester