[PHP] foto's laden uit "onzichtbare" dir

Pagina: 1
Acties:
  • 330 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil via PHP foto's laden in een pagina zonder dat de bezoeker de exacte url kan zien.


Waarom denk ik dat dit kan? kijk eerst even mee naar de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if($_GET[id] == "") {
        include("geheim/index.php");
        } elseif($_GET[id] == "root" || $_GET[id] == "index") {
        include("geheim/error.php"); }
        else {
        $pagina = $_GET[id];
        $totaal = "geheim/$pagina.php";
                if (file_exists($totaal)) {
                include("geheim/$pagina.php");
                } else {
                include("geheim/error.php");
                }

        }
?>


Als je dit php bestandje vanuit de maindir "/dir/" laadt, met ?id=pagina2 dan zal hij pagina2.php uit de directory "/dir/geheim/" laden in /dir/index.php.
eventuele plaatjes die je invoert in pagina2.php haalt hij dan ook uit /dir/ en niet uit /dir/geheim/ terwijl pagina2.php wel in dir/geheim/ is.

Nu zoek ik dus een mogelijkheid om plaatjes te laden in een php bestand door alleen de naam van het plaatje te geven (foto.php?id=x) en dat in de php code wordt gezegd dat de hele url /dir/geheim/x.jpg is, maar dat je dat niet in de code zie als je in je browser kijkt.

Dus, als ik invoer foto.php?id=x dan krijg je /dir/geheim/x.jpg op je beeld maar als je in de source gaat zitten kijken zie je alleen <img src=foto.php?id=x> of iets dergelijks.

tot nu toe heb ik dit, het werkt alleen niet zoals ik wil:

PHP:
1
2
3
4
5
$_GET[id] == "";
$img = $_GET[id];
$foto = "foto/$img.jpg";

echo $foto;


Maar als ik daarna in test.htm doe <img src=foto.php?id=x></img> wordt er geen foto geladen

Kan iemand mij helpen aub? :(

Acties:
  • 0 Henk 'm!

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

Misschien kan je wat met php gd doen? Je hebt alle gegevens, je hoeft dus alleen maar een plaatje aan te maken met de gegevens die je krijgt. Zoek maar eens een tutorial op.

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee, met phpgd enzo lukt het niet. Ik had al wat geprobeerd met createimagefromjpg en daarna de foto laten zien met imagejpg, maar nog steeds niet het gewenste resultaat, en de foto zag er niet meer uit.

Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Kijk naar de GD library, die kan wat jij wilt.

Alleen weet ik niet als je een plaatje laad, of hij dan ook bij de eigenschappen van het plaatje die directorie laat zien.

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Op zich klopt je idee, maar je werkt het verkeerd uit: foto.php moet niet de bestandsnaam uitvoeren, maar de binaire data van de foto; zie bijvoorbeeld file_get_contents.

Als je hierbij de 'geheime' directory onleesbaar maakt voor de webbrowser, kan niemand er ook bij vanuit de browser, alleen via jouw script.

[ Voor 23% gewijzigd door sjroorda op 24-02-2007 20:26 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
sjroorda schreef op zaterdag 24 februari 2007 @ 20:25:
Op zich klopt je idee, maar je werkt het verkeerd uit: foto.php moet niet de bestandsnaam uitvoeren, maar de binaire data van de foto; zie bijvoorbeeld file_get_contents.
Liever readfile. GD heb je trouwens helemaal niet nodig hiervoor.

Had je in je eerste script al bedacht wat er gebeurt wanneer $pagina gelijk is aan ../pad/naar/index? Je krijgt dan een infinite loop.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GlowMouse schreef op zaterdag 24 februari 2007 @ 20:26:
[...]

Liever readfile. GD heb je trouwens helemaal niet nodig hiervoor.

Had je in je eerste script al bedacht wat er gebeurt wanneer $pagina gelijk is aan ../pad/naar/index? Je krijgt dan een infinite loop.
lol! je hebt gelijk! hoe maak ik die infinite loop onschadelijk?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Naast het feit dat die infinite loop bestaat is er nog een veel groter probleem. De kans is namelijk groot dat je alle voor de webserver toegankelijke bestanden kunt opvragen. Denk aan wachtwoord bestanden als /etc/passwd of willekeurige .htaccess en .htpasswd bestanden.

Het plaatje is redelijk simpel. Hiervoor kun je simpel fpassthru (oid) gebruiken. Bedenk echter wel dat een plaatje binair is en dat je er geen rommel (zoals spaties en enters) extra omheen zet doordat dit buiten de php tags staat. Daarnaast zul je voor een plaatje ook een ander content type moeten sturen mbv de header functie. Zoeken naar jpeg, contenttype en php moet je vermoedelijk een paar miljoen nuttige hits opleveren.

@hieronder: Dat valt soms nog wel eens te omzeilen door een \0 byte mee te sturen. De onderliggende c code kan dan denken dat de string al eerder opgehouden is.

[ Voor 10% gewijzigd door Janoz op 24-02-2007 21:12 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op zaterdag 24 februari 2007 @ 21:04:
[...]
lol! je hebt gelijk! hoe maak ik die infinite loop onschadelijk?
Bijvoorbeeld door in een database bij te houden welke files allemaal opgevraagd mogen worden. Staat de file niet in de database, dan stuur je een 404-header. Het gaat trouwens niet alleen om de infinite-loop, maar bijvoorbeeld ook om het openen van andere php-bestanden die met .htaccess beschermd zouden moeten zijn.
Een tweede mogelijkheid is gebruik te maken van realpath.
Denk aan wachtwoord bestanden als /etc/passwd of willekeurige .htaccess en .htpasswd bestanden.
Nee dat lukt niet, hij plakt er nog wel '.php' achteraan.
@ net getest met een chr(0), en je hebt gelijk

[ Voor 3% gewijzigd door GlowMouse op 24-02-2007 21:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
wow... als ik jullie reacties lees is PHP best wel krachtig... ik dacht altijd dat het gewoon een beetje als HTML was 8)7

Maar moet ik nu wel of geen readfile gebruiken, en hoe stuur ik een chr(0) (?) mee???

[ Voor 28% gewijzigd door Verwijderd op 24-02-2007 21:28 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Vergeet ook niet de juiste header mee te geven. Zoiets dus (in geval van jpeg): header('Content-type: image/jpeg');

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Verwijderd schreef op zaterdag 24 februari 2007 @ 21:14:
wow... als ik jullie reacties lees is PHP best wel krachtig... ik dacht altijd dat het gewoon een beetje als HTML was 8)7

Maar moet ik nu wel of geen readfile gebruiken, en hoe stuur ik een chr(0) (?) mee???
Misschien kan je es beginnen met googlen op php thumbnails oid. Ook zowat elk fotoboek gebruikt deze methode.
Pagina: 1