[PHP]FTP connectie via server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tomfish
  • Registratie: Februari 2007
  • Laatst online: 05-08 22:23
Sinds enkele dagen probeer ik een manier te bedenken waardoor bezoekers van site X bestanden kunnen downloaden van een server Y waar een wachtwoord voor nodig is. Ik had een simpel scripje geschreven waarvan ik dacht dat het mijn probleem op kon lossen:
PHP:
1
2
3
4
5
6
<?php
$handle = fopen("http://username:password@url", "r");
if ($handle == false)
{ echo '<p>Connection with server failed</p>'; }
else { echo '<p>Connection with server succeeded</p>'; }
?>


Nu blijkt dit echt niet te werken op de manier hoe ik het in mijn hoofd had. Dit script draait op de site X en geeft het IP adres van de server ( waar site X op staat ) toegang tot server Y waar enkele bestanden op staan die gedownload kunnen worden. Echter nu heeft de bezoeker van de site X, welke een ander IP-adres heeft, geen toegang tot de server Y.

Is er een manier waarop ik het IP-adres van de bezoeker kan koppelen aan de benodigde username en password voor server Y, zonder dat deze zichtbaar zijn of worden doorgegeven aan de bezoeker?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zie geen FTP?

Je wil dus als proxy spelen (kost je wel bandwidth!). Je kan ook het volgende proberen:
PHP:
1
2
3
<?php
// niet getest
echo file_get_contents('ftp://username:password@hostname.nl/path/to/file');


Edit: Tip: het is wel zo netjes om het mime-type mee te geven. Met cachen maak je de hele zooi ook sneller.

[ Voor 19% gewijzigd door Verwijderd op 13-10-2009 20:20 ]


Acties:
  • 0 Henk 'm!

  • donquix
  • Registratie: Augustus 2009
  • Laatst online: 17-09 22:55
Een ftp connectie doe je zo:
PHP:
1
2
$conn = ftp_connect($ftp_server, $ftp_server_port);
ftp_login($conn, $ftp_user_name, $ftp_user_pass);

Maar de oplossing van rutgerlak lijkt me makkelijker als die werkt natuurlijk.

Hier een linkje met uitleg over de ftp functies binnen php: http://us2.php.net/manual/en/book.ftp.php

[ Voor 26% gewijzigd door donquix op 13-10-2009 20:26 ]


Acties:
  • 0 Henk 'm!

  • Tomfish
  • Registratie: Februari 2007
  • Laatst online: 05-08 22:23
Verwijderd schreef op dinsdag 13 oktober 2009 @ 20:17:
Ik zie geen FTP?

Je wil dus als proxy spelen (kost je wel bandwidth!). Je kan ook het volgende proberen:
PHP:
1
2
3
<?php
// niet getest
echo file_get_contents('ftp://username:password@hostname.nl/path/to/file');


Edit: Tip: het is wel zo netjes om het mime-type mee te geven. Met cachen maak je de hele zooi ook sneller.
Het gaat uiteindelijk om bestanden van 300MB tot 400MB , die per maand zo'n 3000 keer gedownload worden. Vandaar ook dat de server ergens ver weg staat. Een doorgeefluik wat mij bandwidth kost is helaas geen oplossing.
donquix schreef op dinsdag 13 oktober 2009 @ 20:25:
Een ftp connectie doe je zo:
PHP:
1
2
$conn = ftp_connect($ftp_server, $ftp_server_port);
ftp_login($conn, $ftp_user_name, $ftp_user_pass);

Maar de oplossing van rutgerlak lijkt me makkelijker als die werkt natuurlijk.
Blijkbaar heb ik niet de bevoegdheden om de url via FTP te benaderen, wanneer dit via http:// etc. gaat, werkt het wel met het ontvangen wachtwoord en gebruikersnaam.

[ Voor 27% gewijzigd door Tomfish op 13-10-2009 20:53 ]


Acties:
  • 0 Henk 'm!

  • donquix
  • Registratie: Augustus 2009
  • Laatst online: 17-09 22:55
Op welke manier wordt de gebruiker om een wachtwoord gevraagd op die andere server? Gaat dat via een htaccess bestand? Want dan kun je ze in dat zelfde bestand ook op IP basis toegang geven.

Acties:
  • 0 Henk 'm!

  • Tomfish
  • Registratie: Februari 2007
  • Laatst online: 05-08 22:23
Het probleem is dat ik vrijwel niets weet van de doelserver. Ik heb alleen een wachtwoord, een gebruikersnaam en een URL gekregen waar ik het mee moest doen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Zolang je van de doelserver alleen maar een username, password en URL hebt ontkom je er niet aan dat je deze gegevens naar de browser van de gebruiker zult moeten sturen. Dat is de enige manier om die browser zover te krijgen de boel te gaan downloaden. Een andere mogelijkheid is er gewoon niet.

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!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:52

krvabo

MATERIALISE!

Zoals jij het wilt lukt het in ieder geval niet. Elke connectie die jij vanaf je server opzet naar de andere, kost dataverkeer.
FTP is altijd client-server en daar kan dus nergens iets tussenkomen zonder dat je de data weer moet verzenden.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
PHP en FTP is niet een beste combinatie. Kost erg veel dataverkeer (hierboven ook al gezegd) en is niet helemaal veilig. (ligt de ftp eruit kan de gebruiker er niet op of er geen gebruik van maken.)

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 08:24

The Eagle

I wear my sunglasses at night

Ik ben echt een leek op het gebied van PHP, dus don't shoot me if I'm wrong ;)

Ik weet niet of vanuit PHP de mogelijkheid bestaat, een clientside app aan te sturen (ik denk dan aan ActiveX of commandline), maar als dat kan kun je de oplossing ook nog daarin zoeken. Toegegeven, misschien niet de mooiste oplossing, maar volgens mij wel en van de stabielste :)

Andere vraag:
Het gaat uiteindelijk om bestanden van 300MB tot 400MB , die per maand zo'n 3000 keer gedownload worden. Vandaar ook dat de server ergens ver weg staat.
Gezien het bovenstaande, vraag ik me af wat voor dataverbindingen er worden gebruikt. Ik ga er vanuit dat dat geen kinderachtige lijntjes zullen zijn, en de hele zaak ergens in een datacenter hangt. True, FTP is sneller...maar als download via HTTP ook werkt en voor de eindgebruike acceptabel snel is, waarom dan niet gewoon via HTTP? Kortom: doe eens een stukje buisiness case, dat verheldert de zaak :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

The Eagle schreef op woensdag 14 oktober 2009 @ 12:02:
Ik ben echt een leek op het gebied van PHP, dus don't shoot me if I'm wrong ;)
Dat blijkt :+, want
Ik weet niet of vanuit PHP de mogelijkheid bestaat, een clientside app aan te sturen (ik denk dan aan ActiveX of commandline), maar als dat kan kun je de oplossing ook nog daarin zoeken. Toegegeven, misschien niet de mooiste oplossing, maar volgens mij wel en van de stabielste :)
Nee. PHP is server-side, die doet niks aan de browser of andere client-side apparaten.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • scorpion-biker
  • Registratie: Augustus 2009
  • Laatst online: 16-09 14:27
Misschien vind je wat nuttigs op onderstaande link;

Er wordt gebruik gemaakt van een userform -> action wijst naar http://locatie/bestand

In het bestand wordt met behulp van location een url gevormd naar de ftp site.

http://www.cs.tut.fi/~jkorpela/forms/getrfc.html

Voorbeeld is een perl script, maar is eenvoudig om te zetten naar php.

World of Trucks ~ Steam ~ CR: clan Kronenjagers (#8QGLP089)


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17-09 20:56
Als jij met ActiveX wilt gaan werken dan stuur je in principe nog steeds die gebruikersnaam en dat wachtwoord naar de gebruiker. De meeste gebruikers zien dat alleen niet.

Gebruikersnaam en wachtwoord serverside houden en je server niet als mirror laten functioneren kan gewoon niet.

De mooie oplossing lijkt mij als je enkele controle hebt over de server waar van gedownload wordt. Je kunt dan met PHP vanaf jouw server een download aanvragen, de externe server geeft dan een eenmalig te gebruiken unieke link door aan jouw PHP, die je voorschotelt aan de gebruiker.

Maar als dat niet kan, dan kan het niet :+

Acties:
  • 0 Henk 'm!

  • bredend
  • Registratie: September 2001
  • Laatst online: 17-09 15:30
Je zou ook een Java applet kunnen proberen. Dan is de eindgebruiker aan het FTP'en zonder de gegevens te weten. Is alleen wel te hacken, mocht dat heel belangrijk zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

De gegevens kan je makkelijk achterhalen omdat ftp/http NIET ENCRYPTED is, even tcpdump gebruiken en je hebt de gegevens. Er is dus geen oplossing voor dit probleem. Je zal toch echt de beheerder van die 2e server moeten zijn.

Vraag of de eigenaar van de 2e server een scriptje kan schrijven die een bepaald ipadres met een code wel toegang kan geven tot de download. Zoiets heeft lighty al: http://redmine.lighttpd.n.../wiki/Docs:ModSecDownload

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Kun je niet gewoon een cronjob die bestanden op laten halen zodat ze ook op je eigen server staan? Iemand die gevalideerd is kan het dan vanaf jouw server downloaden. Wat je wilt kan naar mijn idee gewoon niet verder. Als het verder niks mag kosten (dataverkeer) mis ik sowieso wat nu de situatie is, want blijkbaar heeft iemand dit nodig van je. Leg die persoon dan uit dat je toegangmoet hebben tot die externe server zodat je met tokens kunt werken (en het ip-adres tijdelijk kan toevoegen tot de whitelist) of dat je eigen server over een flinke hoeveelheid dataverkeer moet gaan beschikken.
...omdat ftp/http NIET ENCRYPTED is...
Niet perse waar. Ik download al jaren vanaf FTP met encryptie, geen enkel probleem.

[ Voor 10% gewijzigd door Cartman! op 14-10-2009 15:49 ]


Acties:
  • 0 Henk 'm!

  • Tomfish
  • Registratie: Februari 2007
  • Laatst online: 05-08 22:23
The Eagle schreef op woensdag 14 oktober 2009 @ 12:02:
Ik ben echt een leek op het gebied van PHP, dus don't shoot me if I'm wrong ;)

Ik weet niet of vanuit PHP de mogelijkheid bestaat, een clientside app aan te sturen (ik denk dan aan ActiveX of commandline), maar als dat kan kun je de oplossing ook nog daarin zoeken. Toegegeven, misschien niet de mooiste oplossing, maar volgens mij wel en van de stabielste :)

Andere vraag:

[...]

Gezien het bovenstaande, vraag ik me af wat voor dataverbindingen er worden gebruikt. Ik ga er vanuit dat dat geen kinderachtige lijntjes zullen zijn, en de hele zaak ergens in een datacenter hangt. True, FTP is sneller...maar als download via HTTP ook werkt en voor de eindgebruike acceptabel snel is, waarom dan niet gewoon via HTTP? Kortom: doe eens een stukje buisiness case, dat verheldert de zaak :)
Download werkt via HTTP ook, dat is verder geen probleem. Maar als op die manier alsnog het wachtwoord en gebruiksnaam zijn te achterhalen, dan houdt dat ook snel op.
Pagina: 1