Wegpagina effectief downloaden (ook php)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik ben op zoek naar een javascriptje of iets dergelijks dat ervoor zorgt dat ik een complete webpagina kan dowloaden (de broncode erbij ook als het php is)

Dit nl. voor een cms dat ik aan het maken ben, waar de mogelijkheid in moet zitten om de webpagina in het cms te downloaden (dus niet openen) door middel van een simpele knop.
Ik heb dus ook de ftp rechten en alles dit is geen probleem.

ik heb al verschillende topics doorgenomen als

http://gathering.tweakers.net/forum/list_messages/468469///webpagina%2Cdownloaden
http://gathering.tweakers.net/forum/list_messages/205432///webpagina%2Cdownloaden
http://gathering.tweakers.net/forum/list_messages/801296///webpagina%2Cdownloaden

hier staat voor mij echter niets intressant in aangezien dit meestal gaat over het downloaden van een site met een speciaal bijkomend programma.
is het uberhaupt mogelijk?

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

PHP wordt geparsed door de webserver, en kan je dus (gelukkig) niet zomaar downloaden. Je zult iets moeten doen met FTP oid om bij die broncodes te komen.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 17:36

Koppensneller

winterrrrrr

De broncode van een PHP pagina zomaar download kun je in ieder geval vergeten...

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

Je kan niet van een willekeurige internetpagina de PHP code downloaden. Deze wordt serverside uitgevoerd en het resultaat van de uitgevoerde PHP kun je uiteraard wel downloaden.

En ik had nog wel ge F5-ed :)

[ Voor 8% gewijzigd door BCC op 15-09-2006 16:52 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Nu online

SinergyX

____(>^^(>0o)>____

php zou je serverside apart script kunnen maken die zichtzelf als code parsed (of een forced header download van het php bestand). Zou niet veilig zijn als je bij elk willekeurige website de hele php broncode kan downloaden toch? ;)

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
BCC schreef op vrijdag 15 september 2006 @ 16:52:
Je kan niet van een willekeurige internetpagina de PHP code downloaden. Deze wordt serverside uitgevoerd en het resultaat van de uitgevoerde PHP kun je uiteraard wel downloaden.
het is ook geen willekeurige interpagina, het zijn internetpagina's op mijn server door mij gemaakt zeg maar.

FTP, goeie ga ik is even naar kijken idd...

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Je kunt, wanneer de php-files op de zelfde plek als je CMS staan, de inhoud ervan uitlezen met php. Functies als fopen(); fgets(); en fread(); zijn voor het uitlezen van files. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
OkkE schreef op vrijdag 15 september 2006 @ 17:00:
Je kunt, wanneer de php-files op de zelfde plek als je CMS staat, de inhoud ervan uitlezen met php. Functies als fopen(); fgets(); en fread(); zijn voor het uitlezen van files. :)
hier maak ik op het moment idd al gebruik van voor het editten van mijn pagina's.
broncode is ookal zichtbaar.

wat ik dus wel zou kunnen doen eventueel is het bestand mailen? via de server? omslachtig maar dit moet wel werken volgens mij of niet?

het moet zo gebruiksvriendelijk mogelijk blijven, maar dat gaat niet meevallen heb ik al door :+

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

Wat wil je precies gaan doen in je CMS dan?

1) Dat mensen een pagina kunnen kopieren van een andere (eigen) site?
Dan heb je geen PHP oid nodig, je kan dan gewoon de pagina grabben

2) Dat mensen een pagina kunnen verplaatsen van server 1 naar server 2.
Dan dien je via FTP bestanden te gaan schuiven. Dit is echter niet zo triviaal. PHP files kunnen andere PHP files includen of databases aanspreken. Deze zul je dan ook allemaal mee moeten kopieren...

En vraag tweeL waarom zou iemand dat überhaupt willen? Als je naar een bepaalde pagina wilt verwijzen, dan link je toch ?

[ Voor 11% gewijzigd door BCC op 15-09-2006 17:04 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Bij een CMS wil je juist de content makkelijk beheren, alle code kunnen inzien en aanpassen slaat echt nergens op, het implementeren van het CMS en het gebruik van het CMS kan je imo beter gescheiden houden.

{signature}


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
BCC schreef op vrijdag 15 september 2006 @ 17:03:
Wat wil je precies gaan doen in je CMS dan?

1) Dat mensen een pagina kunnen kopieren van een andere (eigen) site?
Dan heb je geen PHP oid nodig, je kan dan gewoon de pagina grabben

2) Dat mensen een pagina kunnen verplaatsen van server 1 naar server 2.
Dan dien je via FTP bestanden te gaan schuiven. Dit is echter niet zo triviaal. PHP files kunnen andere PHP files includen of databases aanspreken. Deze zul je dan ook allemaal mee moeten kopieren...

En vraag tweeL waarom zou iemand dat überhaupt willen? Als je naar een bepaalde pagina wilt verwijzen, dan link je toch ?
omdat dan de mensen de pagina echt kunnen opslaan op hun hardeschijf.
en om te kijken of het kan... (dit cms is ook een leerproject voor mezelf geworden ondertussen waar ik erg veel van opsteek en ook nog nut heeft)

[quote]Voutloos schreef op vrijdag 15 september 2006 @ 17:03:
Bij een CMS wil je juist de content makkelijk beheren, alle code kunnen inzien en aanpassen slaat echt nergens op, het implementeren van het CMS en het gebruik van het CMS kan je imo beter gescheiden houden.[/quote]
je kan ook gewoon wysiwig de content aanpassen; de code is een extra, dat jij het nergens op vind slaan, hoeft nog niet te zeggen dat ik (en de gebruiker) het niet handig vinden, zo kan hij bijvoorbeeld om iets stoms te zeggen, zelf een javascript voor een teller van 1 of andere site er tussen copy pasten.

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

langezwieper schreef op vrijdag 15 september 2006 @ 17:10:
[...]
omdat dan de mensen de pagina echt kunnen opslaan op hun hardeschijf.
en om te kijken of het kan... (dit cms is ook een leerproject voor mezelf geworden ondertussen waar ik erg veel van opsteek en ook nog nut heeft)
Prima, maar ze kunnen er dan dus niets mee, omdat ze files missen (PHP en CSS), geen PHP parser hebben, geen database server hebben, etc. Oftewel: daar hebben ze geen fluit aan.
je kan ook gewoon wysiwig de content aanpassen; de code is een extra, dat jij het nergens op vind slaan, hoeft nog niet te zeggen dat ik (en de gebruiker) het niet handig vinden, zo kan hij bijvoorbeeld om iets stoms te zeggen, zelf een javascript voor een teller van 1 of andere site er tussen copy pasten.
Zoals ik al zei: Die code is in veel van de gevallen niet opzichzelf staand, maar gebaseerd op een bepaalde context. Als jij hem uit die context haalt, dan funtioneert hij niet meer.

[ Voor 9% gewijzigd door BCC op 15-09-2006 17:45 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
wat ik dus wel zou kunnen doen eventueel is het bestand mailen? via de server? omslachtig maar dit moet wel werken volgens mij of niet?
Je kunt toch gewoon (zoals al eerder gezegd) met file_get_contents() bijvoorbeeld de inhoud van het php bestand ophalen, en die dan echo'en?

Heb je enkel een nieuwe php pagina nodig waar je als parameter een betandsnaam aan meegeeft, die wat checks doet en vervolgens het bestand teruggeeft. Dat bestand kun je dan als download aanbieden, of gewoon in de html in <pre /> zetten :)

Acties:
  • 0 Henk 'm!

Verwijderd

langezwieper schreef op vrijdag 15 september 2006 @ 16:50:
Ik ben op zoek naar een javascriptje of iets dergelijks dat ervoor zorgt dat ik een complete webpagina kan dowloaden (de broncode erbij ook als het php is)
Ik weet niet of ik je goed begrepen heb, maar bij mij werkt dit:

pagina.php
PHP:
1
2
3
4
5
6
<html>
<body>
<p><?php echo("Hello world."); ?></p>
<p><a href="download.php?page=pagina.php">download de broncode van deze pagina</a></p>
</body>
</html>


download.php
PHP:
1
2
3
4
5
<?php
header('Content-Type: text/php');
header('Content-Disposition: attachment; filename='.$_GET["page"]);
readfile($_GET["page"]);
?>


Dit schijnt niet te werken bij IE4 en IE5.5 zonder SP2.

Ik weet niet of hier verder nog meer bezwaren aan kleven. Iemand?

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

Eh, ja.. dat je met die download.php een enorm gat in je webserver schiet. Je kan nu ALLE bestanden uit het /var/www gedeelte downloaden en als je niet alles netjes dicht hebt staan ook heel veel van de rest van de server :X Cross site exploits worden zelfs ook mogelijk...

[ Voor 9% gewijzigd door BCC op 15-09-2006 23:49 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op vrijdag 15 september 2006 @ 23:37:
[...]

Ik weet niet of ik je goed begrepen heb, maar bij mij werkt dit
Het werkt wel, maar zonder checks op input kun je elk bestand op je server downloaden, ook de bestanden waar je niet naar linkt. Zonder extra beveiliging is dat script erg onveilig.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Verwijderd schreef op vrijdag 15 september 2006 @ 23:37:
[...]
Ik weet niet of hier verder nog meer bezwaren aan kleven. Iemand?
Ja, ik zou even checken of $_GET["page"] wel een geldige waarde heeft. Nu kan iemand waarschijnlijk willekeurig bestanden downloaden door enkel die get-parameter te veranderen.

Maar dit is idd wat ik ongeveer bedoelde :)

edit: spuit 11, en dat zolaat nog ;)

[ Voor 5% gewijzigd door user109731 op 15-09-2006 23:52 ]


Verwijderd

BCC schreef op vrijdag 15 september 2006 @ 23:46:
Eh, ja.. dat je met die download.php een enorm gat in je webserver schiet. Je kan nu ALLE bestanden uit het /var/www gedeelte downloaden en als je niet alles netjes dicht hebt staan ook heel veel van de rest van de server :X Cross site exploits worden zelfs ook mogelijk...
Ja, da's waar natuurlijk. Maar het kan natuurlijk ook met iets anders dan $_GET, met $_SESSION of zo. Of kleven ook daar gevaren aan?

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op zaterdag 16 september 2006 @ 00:26:
[...]
Ja, da's waar natuurlijk. Maar het kan natuurlijk ook met iets anders dan $_GET, met $_SESSION of zo. Of kleven ook daar gevaren aan?
Hoe wil je een $_SESSION variabele een waarde toekennen als iemand op een link klikt? Wat je wilt is checken of het opgevraagde bestand wel opgevraagd mag worden.

Verwijderd

GlowMouse schreef op zaterdag 16 september 2006 @ 00:41:
Hoe wil je een $_SESSION variabele een waarde toekennen als iemand op een link klikt? Wat je wilt is checken of het opgevraagde bestand wel opgevraagd mag worden.
In pagina.php geeft je een sessievariabele de waarde "pagina.php". Op pagina.php staat dan de link naar download.php. Die pagina checkt dan dmv de sessievariabele welke pagina gedownload wordt.

Als download.php dan rechtstreeks wordt aangeroepen is er geen bestand om te downloaden en an doet hij niets.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op zaterdag 16 september 2006 @ 00:58:
[...]
In pagina.php geeft je een sessievariabele de waarde "pagina.php". Op pagina.php staat dan de link naar download.php. Die pagina checkt dan dmv de sessievariabele welke pagina gedownload wordt.

Als download.php dan rechtstreeks wordt aangeroepen is er geen bestand om te downloaden en an doet hij niets.
Ik denk dat je je hier beter in kunt verdiepen alvorens zulke constructies te bedenken. Niet alleen is deze constructie lastig te onderhouden, ook is zij onveilig. Het is namelijk nog steeds mogelijk om pagina.php te openen (en dus de sessievariabele de juiste waarde aan te laten nemen), en daarna in de titlebar download.php?page=evil_file op te vragen. Omdat de sessievariabele blijft bestaan zolang de browser niet gesloten wordt, zal download.php hem gewoon uit kunnen lezen zodat je beveiliging omzeild wordt. Een eventuele referercheck die dit op het eerste oog kan voorkomen, maakt dit niet veiliger omdat ook die makkelijk te omzeilen is.

De enige juiste methode is om $_GET['page'] te onderzoeken in download.php. Het is bijvoorbeeld mogelijk om hem te checken aan de hand van een whitelist.

[ Voor 8% gewijzigd door GlowMouse op 16-09-2006 01:22 . Reden: voorbeeld verduidelijkt ]


Verwijderd

Maar ik bedoelde juist dat je die hele $_GET laat zitten:
Maar het kan natuurlijk ook met iets anders dan $_GET, met $_SESSION of zo.
Je moet dan inderdaad op iedere niet-evil pagina:
1. aangeven dat hij gedownload mag worden ($_SESSION);
2. de link naar download.php neerzetten.

Inderdaad moet je dan per pagina aangeven dat hij gedownload mag worden, maar dat is toch wat langezwieper wilde?

(Op evil pagina's kun je voor mijn part die sessievariabele op "no way" zetten of zo, om het voor download.php duidelijk te maken dat hij niets mag doen.)

(Ik weet ook wel dat ik geen pro ben. Vandaar dat ik ook uitdrukkelijk vroeg om te reageren ivm bezwaren/gevaren. Ik wilde alleen laten zien dat het niet onmogelijk is een php-pagina ter download aan te bieden.)

[ Voor 24% gewijzigd door Verwijderd op 16-09-2006 01:30 ]


  • user109731
  • Registratie: Maart 2004
  • Niet online
Nofi, maar ik zou dit niet doen zo, je misbruikt enkel sessions en het kan zoveel eenvoudiger en veiliger. Elke plaats waar je input binnenkrijgt kan misbruikt worden en door gewoon netjes je $_GET[] te checken is die kans volgens mij veel kleiner.

Als je het echt per pagina aan wil kunnen geven, zet dan iets van <?php // file_download_okay ?> boven elke pagina, haal met file_get_contents() de inhoud van het bestand op, en check of het bestand hiermee begint. :) Dezelfde functionaliteit, maar dan veel eenvoudiger te overzien.

Keep it simple.

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 17:41
De makkelijkste oplossing is volgens mij om gewoon mensen een FTP-linkje te geven. Ik neem toch aan dat de mensen die je de bestanden wil laten downloaden de (content)-beheerders van je cms zijn? Dus dan kan je gewoon indien ze een php pagina willen downloaden een ftp-linkje geven.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/

Pagina: 1