Toon posts:

[PHP] Inhoud bestand dumpen naar browser

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klein php-scriptje gemaakt om textbestandjes op een m'n webspace te lezen en in m'n brouwservenster te tonen.
Het probleem is dat wanneer er HTML of PHP instaat, die geïnterpreteerd worden |:(

De code is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<HTML>
<HEAD>
<TITLE>Remote Text File Reader</TITLE>
<HEAD>
<BODY>
<?php
    if ($filename=="")
    {
        echo "<form action=\"file.php\" method=get><p>File to read: <input type=text name=filename></p>";
        echo "<p><input type=submit value=\"Proceed\"></p>";
    }
    else
    {
        $fd = fopen ($filename, "r");
        while (!feof ($fd)) 
        {
                $buffer = fgets($fd, 4096);
                echo $buffer;
        }
        fclose ($fd);
        
        echo "<p>File dump done.</p>";
        echo "<P><A HREF=\"file.php\">New session</A></P>";
    }
?>
</BODY>
</HTML>


Testen kan hier

Als je bijvoorbeeld dit vraagt: http://serebii.suidzer0.org/forum/showthread.php, gaat ie dat gewoon uitvoeren, maar zie ik wel geen source code.
Idem met pagina's opgemaakt in html.

Weet iemand hoe ik dat moet oplossen? Met een speciale functie of zo?

En als ik slechts een aantal regels wil lezen, is het voldoende wanneer ik er een tellertje bij zet: while(i<30) ?

Alvast bedankt :)

  • Speedener
  • Registratie: September 2000
  • Laatst online: 31-08 08:11
dus hij moet alles laten zien? ook als er php of html in staat?

probeer eens view_source(*bestand*);

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Weet iemand hoe ik dat moet oplossen? Met een speciale functie of zo?
Niet. Je kan alleen de source van je lokale bestanden zien (dmv show_source). Als jij aan een andere server een .php bestand vraagt, dan gaat deze eerst dat bestand parsen, en krijg jij dus alleen HTML terug...
En als ik slechts een aantal regels wil lezen, is het voldoende wanneer ik er een tellertje bij zet: while(i<30) ?
Ja, gewoon
code:
1
2
3
4
5
$i = 0;
while (!feof ($fd) && $i < 30) 
{
  $i++
[...]

[ Voor 0% gewijzigd door Rashann op 28-08-2002 09:11 . Reden: / vergeten :P ]

If nothing is written below, I was the last to reply...


Verwijderd

PHP:
1
2
3
$buffer= htmlspecialchars ( $buffer);   // Convert & to &amp; etc...
$buffer= strip_tags ( $buffer);     // Remove HTML-tags
echo $buffer;

hf

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Dat php wordt uitgevoerd is niet vreemd waneer je je bestanden inleest via http. Waneer je gewoon het absolute pad gebruikt (ful maar eens file.php in ipv een hele url) dan zul je zien dat de php niet geparsed wordt.

Om er ook nog voor te zorgen dat de html niet door de browser wordt geinterpreteerd moet je ff naar html_special_chars kijken in de php manual.

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


  • ET
  • Registratie: Mei 2000
  • Laatst online: 17-06 18:00

ET

htmlspecialchars() of htmlentities() zorgen er voor dat de speciale html-opmaak karakters worden vervangen, zodat ze niet geinterpreteerd worden als opmaak, maar als tekst.

Dit zou moeten voorkomen dat je bestand geintepreteerd word.

Verwijderd

Topicstarter
Het werkt mooi met die HTML :)
Is indentation ook mogelijk? Kwestie van een mooi overzicht te krijgen.

En... om <?php ... ?> stukjes te zien is dus niet mogelijk als ik het goed begrijp. Bestaat daar geen achterpoortje voor of iets dergelijks?

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Verwijderd schreef op 28 augustus 2002 @ 10:12:
Het werkt mooi met die HTML :)
Is indentation ook mogelijk? Kwestie van een mooi overzicht te krijgen.
Dat kan wel, maar daar is niet zo een standaard component voor... dan zou je dat zelf moeten schrijven (alle tags afvangen en identen, lekker veel werk :P)
En... om <?php ... ?> stukjes te zien is dus niet mogelijk als ik het goed begrijp. Bestaat daar geen achterpoortje voor of iets dergelijks?
Ik hoop het niet! Dat zou niet echt goed zijn natuurlijk voor veiligheidsredenen...

If nothing is written below, I was the last to reply...


  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 23-08 12:03

[ash]

Cookies :9

Je kan de functie highlight_file gebruiken om zelfs de inhoud van php pagina's te tonen.

Zie voor verdere info: http://www.php.net/manual/en/function.highlight-file.php

Succes ermee

Verwijderd

Topicstarter
Heel erg bedankt.
Ben momenteel met m'n file aan't prutsen... dus very buggy als je wil testen ;)

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

[ash] schreef op 28 augustus 2002 @ 10:43:
Je kan de functie highlight_file gebruiken om zelfs de inhoud van php pagina's te tonen.

Zie voor verdere info: http://www.php.net/manual/en/function.highlight-file.php

Succes ermee
Dat werkt dus alleen als de php bestanden op dezelfde server staan. Als je de code van een php bestand van een andere server wil zien, werkt dit ook niet...

If nothing is written below, I was the last to reply...


Verwijderd

Topicstarter
'k heb het idd gemerkt...

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 23-08 12:03

[ash]

Cookies :9

FF voor mijn duidelijkheid,

Zodra je een php pagina opvraagt van een andere server, zal die, als daar php draait, op die server geintepreteerd en geprocessed worden door PHP aldaar.

Je zal de source nooit kunnen bekijken, en gellukig maar :)

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03-2025
Je hebt wel een hele grote bug in het script zitten en dat is namelijk dat je alles op je PC kan bekijken. Voorbeeldje:
http://satoshi.homeip.net:8080/file.php?filename=c:\boot.ini

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Verwijderd

Topicstarter
Ik ben me er van bewust!
En met het nodig geprul kan je zelfs mijn pc controleren...

Toch bedankt voor het melden ^_^

Ik zal me er maar bij neerleggen dat het niet gaat. neworder en blackbox maar eens checken voor eventuele security gaps bij Apache/PHP ;)

Verwijderd

Het kan heel goed! Voeg om c:\boot.ini niet te kunnen krijgen gewoon een ./ ervoor, dus zo:

PHP:
1
$url = './' . $_POST['url']


Zoiets iig

Verwijderd

der staat nu wat op codebase.nl :) een scriptie dat mischien wel werkt, ff kijken bij de laaste 10 nogwattus...

Verwijderd

Topicstarter
Hehe ^^

'k zal es gaan kijken.
_J_R_R, wat moet die $url variabele eigenlijk doen?

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

Verwijderd schreef op 29 augustus 2002 @ 08:18:
Hehe ^^

'k zal es gaan kijken.
_J_R_R, wat moet die $url variabele eigenlijk doen?
Dat is bij jou de variabele $filename...

$filename = './'. $_GET['filename'];
Dit moet net na de 'else'
_J_R_R: Hij gebruikt een form met als methode 'GET' :)

[ Voor 0% gewijzigd door Rashann op 29-08-2002 09:04 . Reden: Berichtje voor _J_R_R ]

If nothing is written below, I was the last to reply...

Pagina: 1