Avatar billede karlsen Nybegynder
09. juli 2001 - 12:23 Der er 25 kommentarer og
1 løsning

open_basedir vs. php browser-upload!

Kun for eksperter!
------------------

Jeg har lavet et script til at uploade filer til min hjemmeside fra et browser-vindue.

Scriptet fungerer således at når filen er blevet uploadet til serveren, læser det indholdet af filen fra dens upload_tmp placering og skriver indholdet ind i en database.

Dette fungerer fint på min egen hjemmeserver, på diverse gratis-servere på internettet.
MEN: på det webhotel som jeg har købt har de alt for god sikkerhed. For når jeg har uploaded en fil med mit script, og scriptet når til det punkt hvor det skal læse den uploadede fil fra dens upload_tmp placering, kommer der følgende fejl:

Warning: open_basedir restriction in effect. File is in wrong directory.

Mit open_basedir er mit webside-bibliotek, eks. på serveren /home/user/httpdocs/*
Alt hvad der ligger uden for dette bibliotek kan jeg ikke tilgå. Med det resultat at den fil jeg har uploadet gennem min browser, som php automatisk ligger på en temp-placering i dette tilfælde /tmp/fil ikke kan tilgås pga. mit open_basedir!

Jeg kan umiddelbart ikke kopiere eller læse fra /tmp/fil
Og heller ikke chmod\'e noget som helst.

Serveren: linux, apache, php4



SPØRGSMÅL:
------------
Så er det mit spørgsmål lyder:

1.
Er der nogen der har erfaring med hvordan man tilgår uploadede filer fra deres temp-placering uden at støde ind i en open_basedir restriction?

2.
Er der nogen der kender (ja, kender - og IKKE gætter!) en løsning på mit problem. Her stiler jeg efter en løsning som webhotel udbyderen ikke skal til at installere/konfigurere, men jeg selv kan implementere i mit script (så vidt det altså er muligt.)
Avatar billede erikjacobsen Ekspert
09. juli 2001 - 12:26 #1
Du skal kontakte din udbyder med problemet.
Avatar billede bbs Nybegynder
09. juli 2001 - 12:29 #2
Det er desværre kun din udbyder der kan svare på det.
Vi kender jo ikke til deres instillinger ;)
Avatar billede karlsen Nybegynder
09. juli 2001 - 12:33 #3
Er der nogen af jer der bruger open_basedir på jeres ?
Avatar billede bbs Nybegynder
09. juli 2001 - 12:41 #4
Nej, jeg gør ikke...
Avatar billede erikjacobsen Ekspert
09. juli 2001 - 12:49 #5
Det er intet problem at til /tmp som et af de kataloger, der kan tilgås, men
det skal gøres af dit webhotel - du kan jo bestemt ikke :)

Check (eller referer til) http://php.net/manual/en/configuration.php - og led efter
open_basedir.

Hvad er det for et webhotel, der undtagelsesvist tager sikkerheden så
alvorligt :)
Avatar billede erikjacobsen Ekspert
09. juli 2001 - 12:50 #6
...at tilføje /tmp...

mente jeg jo nok!
Avatar billede bbs Nybegynder
09. juli 2001 - 12:51 #7
Kæmp for det Erik!
Vi vil se dig på 1. pladsen igen ;)
Avatar billede erikjacobsen Ekspert
09. juli 2001 - 12:54 #8
Nå, bbs, men det gider jeg ikke mere - der er koldt på toppen, ha ha
Avatar billede bbs Nybegynder
09. juli 2001 - 12:58 #9
hehe :)
Hvor lang tid havde du den egentlig, og hvem havde den før du lå der i så lang tid?
Avatar billede karlsen Nybegynder
09. juli 2001 - 13:00 #10
Hmm, i php manualen står der at open_basedir kun restricter når man prøver at åbne en fil udenfor med fopen eller gzopen. Men når jeg så prøber at move_uploaded_file eller copy, så får jeg permission denied.

Det er vel fordi der er den forkerte chmod på destinationen, men den har jeg prøvet at ændre mange gange, men alt hvad jeg forsøger at chmod\'e det får jeg også at vide jeg ikke kan.

Mit dir har følgende brugerrettigheder:
drwxr-xr-x  minbruger  pleskcln    4096 Jul  8 19:12 httpdocs
Avatar billede karlsen Nybegynder
09. juli 2001 - 13:53 #11
Hmm, man plejer ellers altid at få en lille pakkeløsning når man udlover 300 point... :)
Avatar billede erikjacobsen Ekspert
09. juli 2001 - 16:49 #12
Nej, det er ikke dit katalog der er noget i vejen med, men derimod kan det
være /tmp kataloget, der har forkerte tilladelser.

Tjah, jeg tager nu ikke folk alvorligt, der bare \"smider om sig med point\". Et
svært spørgsmål sættes til 60 p. Overholder du det, bliver du taget mere
alvorligt. Med mange point kommer der bare en masse ligegyldige savr.
Avatar billede karlsen Nybegynder
11. juli 2001 - 01:33 #13
Hmmmm. Jeg fik lige en idé, jeg har ikke den fjerneste anelse om hvordan det skal se ud:
Er det muligt at fange en fileupload med noget stdin eller HTTP_RAW_POST_DATA sjov?

Således man slipper for at skulle læse fra disken overhovedet?
Avatar billede karlsen Nybegynder
11. juli 2001 - 03:08 #14
jeg har også forsøgt med exec() og trække indholdet ud af temp-filen med cat. Det kan jeg godt få til at fungere, men ikke med binære filer.
Avatar billede erikjacobsen Ekspert
11. juli 2001 - 06:46 #15
Så de lukker for noget i PHP, men tillader udførelse af systemkommandoer. Ha ha, du
skal vist alligevel ikke fortælle navnet på det webhotel!

Hvad laver du med cat - den har intet problem med \"binære filer\", som er et ukendt
begreb i Unix (alt ér binære filer). Kan du vise koden, kan vi vel lave et hack.
Avatar billede karlsen Nybegynder
11. juli 2001 - 11:33 #16
Den funktion jeg skal replikere på en eller anden måde, er følgende udsagn:

$data = addslashes(fread(fopen($userfile, \"rb\"), filesize($userfile)));

Den formaterer nemlig $data så jeg kan proppe den i sql-databasen.

Det jeg gjorde med cat ser således ud:

$execvar = \'cat \';
$execvar .= $userfile;
exec($execvar, $return);

for ($i = 0 ; $i < sizeof($return); $i++) {
    $thedata .= $return[$i];
}

Linieskift i tekstfiler fungerer ikke, og billeder de kraller fuldstændigt af. Men ihvertfald så skal denne her funktion blot ende op med at gøre det samme som $data = addsl... listet ovenfor.
Avatar billede erikjacobsen Ekspert
11. juli 2001 - 12:27 #17
Ok - du kører da på en unix-lignende tingest, ikke? Den der \"rb\" er kun nødvendig
under Windows (men skader ikke ...)

Jeg tror du skal kopiere til en fil hos dig selv, og så læse den derfra, altså

  \"cat $userfile /home/ditegetkatalog/upload/fil\"

f.eks. Så kan du åbne den med fopen - formentlig. Det er spændende det her....
Men vær opmærksom på at dit webhotel kan finde på at lukke muligheden for dette,
hvis de nu tager sikkerhed alvorligt.
Avatar billede karlsen Nybegynder
11. juli 2001 - 12:37 #18
Nix, for uanset hvordan, så kan jeg ikke skrive til mit eget bibliotek.

Så det er noget med at hente filen ind på den måde som jeg havde gang i med cat. Men hvordan...
Avatar billede karlsen Nybegynder
11. juli 2001 - 12:39 #19
PS:
Min hjemmecomputer som jeg skriver det på kører win, derfor \"rb\".
Avatar billede erikjacobsen Ekspert
11. juli 2001 - 12:42 #20
popen ?
Avatar billede karlsen Nybegynder
11. juli 2001 - 12:45 #21
aargh, selvfølgelig. Jeg tester lige.
Avatar billede karlsen Nybegynder
11. juli 2001 - 12:48 #22
YES! det virker. tak skal du have.
Avatar billede karlsen Nybegynder
11. juli 2001 - 12:49 #23
Nu må du så selv vælge om du vil have 60 eller 300 point hehe. eller om du ikke vil have nogen.
Avatar billede erikjacobsen Ekspert
11. juli 2001 - 15:23 #24
Lad os sige 60 - det grænser da til at svært spørgsmål ;)
Avatar billede karlsen Nybegynder
11. juli 2001 - 15:30 #25
øhm, jeg er kommet til at lukke spørgsmålet...
Avatar billede ormehullet Nybegynder
07. juni 2003 - 20:54 #26
Hej du Karlsen, kan du ikke lægge kode stumpen op så jeg kan se hvordan tricket bliver udført... Læser du filerne ind i en sql database?
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