Avatar billede avminarm Juniormester
14. september 2014 - 15:53 Der er 35 kommentarer

beskytte fil eller hente login oplysninger til mysql på anden vis

Hej

Jeg har et setup hvor en bestemt fil på nogle forskellige domæner køres engang i timen via cronjob - det fungerer fint (der ligger fysisk en fil på hvert domæne).

Men filen indeholder login oplysninger til databasen og brugere af de forskellige domæner har adgang til denne fil hvilket ikke er så smart, for så kan man downloade filen, åbne den og se loginoplysningerne.

Filen skal ligge på det enkelte domæne da den rydder op i nogle mapper, filer mv og benytter bl.a. mkdir() & rmdir(), samt gennemgår filer i mapperne - det kan så vidt jeg ved ikke køre remote fra f.eks. et andet domæne.

Jeg har overvejet at bruge en PHP obfuscator - men er ikke sikker på dette er en god løsning.

er der nogen der har gode ideer?
Avatar billede erikjacobsen Ekspert
14. september 2014 - 16:16 #1
Brugerne har adgang? Den fik jeg ikke helt. Dvs at brugerne har fri ftp-adgang til filerne på serveren? Men så har de jo også adgang til alle mulige andre PHP-filer med login-oplysninger.

Men ok. Hvis du har mulighed for at kalde filen udefra, på en måde, så lad login-oplysninger komme udefra, mens koden som sådan ligger i PHP-filen.
Avatar billede avminarm Juniormester
14. september 2014 - 20:34 #2
Hej Erik

Ja brugeren har ftp adgang det er deres egne filer der ligger/lægges op - det er billedfiler der gemmes 3 dage hvor efter de slettes via cronjob og der indsættes noget statistik data i databasen.

Jeg kan godt kalde filen ude fra - men har brug for at oplysninger om oprydningen gemmes i databasen specifikt på den enkelte bruger.

Giver det mening?
Avatar billede erikjacobsen Ekspert
14. september 2014 - 22:10 #3
Men ved at kalde udefra kan du stadig skrive i databasen. Brugernavn og password kommer med i kaldet, og findes ikke i PHP-filen. Der kan så være noget med timeout - typisk sat til 20-30 sekunder.

Men så var det vel bedre at ftp-brugerne fik adgang til et andet område, end hvor PHP-filen ligger. Det kan man normalt sætte op - men afhængigt af hvor det er hosted. Evt kan PHP-filen ligge som et subdomæne, hvor ftp-brugerne til det normale domæne ikke har adgang.
Avatar billede moddi100 Seniormester
14. september 2014 - 23:01 #4
Hvad sker der hvis brugeren erstatter php-filen med sin egen og på den måde aflurer login-oplysningerne alligevel?

Jeg ville have php-scriptet liggende et andet sted og så anvende FTP-funktionerne i php. Se mere på
http://dk2.php.net/manual/en/function.ftp-mkdir.php
http://dk2.php.net/manual/en/function.ftp-nlist.php
Avatar billede erikjacobsen Ekspert
14. september 2014 - 23:07 #5
Ja, det vil de jo nok kunne gøre. Ftp-funktionerne i PHP kan vel - men det tager tid.

Hvad med at adskille brugere og PHP-fil? Og kan brugerne ødelægge noget for andre brugere?
Avatar billede avminarm Juniormester
15. september 2014 - 07:53 #6
Hej begge to

Tak for input - fedt  med gode input :-)

Brugeren kan kun ødelægge noget for sig selv, så andre brugere er ikke påvirket. Hver bruger har sit eget subdomæne.

Erik du har ret i at det er timeout der er problemet.
Det er derfor jeg kun har kunnet få det til at fungere ved at filen ligger på brugerens subdomæne.
Folen rydder op i (til tider) flere tusinde billeder fordelt i mange mapper.

Modfi100:  jeg vil kigge på det her en af dagene, men  tror måske det vil time out?

Jeg overvejer at lade oprydningen ligge i en fil og så kalde en fil på et andet domæne når oprydning er slut
Men hvordan kalder jeg nemmest en fil på et andet domæne i en fil der afvikles af et cronjob?
Via header("location: http://fil.php") ?
Eller er der en smartere måde?
Avatar billede avminarm Juniormester
15. september 2014 - 08:49 #7
Kom lige til at tænke på om man kan "ping ponge" mellem 2 filer på 2 domæner?
For inden oprydningen kan køre skal filen hente data i database

Altså: cronjob stater fil på:
Http://sub.domæne.dk/fil.php

Fil.php kalder på dbfil.php på http://domæne.dk/dbfil.php

dbfil.php henter oplysn i database og kalder http://sub.domæne.dk/fil.php igen

Eller er det helt hen i vejret?
Avatar billede avminarm Juniormester
16. september 2014 - 22:12 #8
ingen bud?
Avatar billede avminarm Juniormester
20. september 2014 - 23:22 #9
Hej igen

Jeg har rodet lidt med løsningen.
Jeg har flyttet mine sql opslag over på et andet domæne og vil herfra kalde filen på det enkelte subdomæne når oplysningerne er hentet i databasen - men jeg har stadigvæk lidt udfordringer.

jeg har brug for at få udført følgende.
TOPDOMÆNE:
- der hentes oplysninger i databasen

de oplysninger der hentes er bla hvor mange mapper brugeren har på subdomænet & hvor mange dagen brugeres filer skal gemmes.
Det kan varierer hvor mange mapper brugeren har.

SUBDOMÆNE
Herefter skal filen på sub domænet kaldes:
Her gennemgås hver enkelt mappe og sletter filer der er for gamle, samt flytter de eksisterende filer i en arkiv mappe+der oprettes datomarkerede mapper.

Herefter skal databasen igen opdateres med "oprydningstidspunktet".

mit problem består lid i hvordan jeg smartest kalder filen på subdomænet - jeg har brugt header("location. ....") men så er jeg nødt til at sende et array med som GET variabel.

jeg ville helt klart foretrække at når filen køres på topdomænet looper den igennem aller brugere og mapper og for hver mappe pr. bruger skulle oprydningsfilen så køres på subdomænet - men hvordan søren kan jeg gøre dette?

Håber i kan give lidt hjælp med på vejen.
Avatar billede erikjacobsen Ekspert
20. september 2014 - 23:27 #10
Det vil hjælpe gevaldigt hvis vi ved hvor du har det hosted, og hvad muligheder, der nu er.
Avatar billede avminarm Juniormester
20. september 2014 - 23:39 #11
det er hos gigahost.dk og jeg har mulighed for at køre filer automatisk f.eks.: kør: www.domæne.dk/fil.php?do=cleanup
Avatar billede erikjacobsen Ekspert
20. september 2014 - 23:58 #12
Hmm, ja. Gigahost.dk giver dig mulighed for separate ftp-konti for hvert domæne og subdomæne. Men du har fortsat et primært login til ftp i hvert fald, hvor du kan tilgå alle filer, i alle domæner og subdomæner. Hvis dit cronjob kører fra primært login, vil man så ikke kunne komme til alle filer?
Avatar billede avminarm Juniormester
21. september 2014 - 00:21 #13
Hver bruger har sit eget FTP login - det er ok - de har kun adgang til subdomænet hvor deres egne filer ligger + denne ene oprydningsfil og det er lige netop denne oprydningsfil der giver problemerne.

Den skal være der + jeg skal bruge oplysninger fra DB + jeg skal opdatere DB igen - MEN jeg kan ikke have mysql bruger & pass i denne fil
Avatar billede erikjacobsen Ekspert
21. september 2014 - 00:27 #14
Jeg siger, at du skal forsøge dig med ikke at lægge din "oprydningsfil" sammen med filerne i mappen til subdomænet. Du skal prøve at til filerne i mappen udefra, om jeg så må sige, med stierne til mappen. Dit primære login har i hvert fald adgang via ftp, så du skal prøve at se om der ikke også er adgang vi et cronjob.
Avatar billede erikjacobsen Ekspert
21. september 2014 - 00:35 #15
Ser ud til at man i hvert fald sagtens kan aflæse filnavne i de kataloger, der tilhører andre domæner og subdomæner.
Avatar billede erikjacobsen Ekspert
21. september 2014 - 00:38 #16
Og man kan også slette filer i de kataloger, der tilhører andre domæner og subdomæner men PHPs unlink
Avatar billede erikjacobsen Ekspert
21. september 2014 - 00:39 #17
Ikke "men", men "med".
Avatar billede avminarm Juniormester
21. september 2014 - 01:05 #18
Ok. Jeg må prøve mig frem, men jeg tror ikke mkdir kan virke fra et domæne til et andet?
Og jeg kom lige til at tænke på at hvis unlink virker på tværs af domæner, kunne jeg så ikke slette filer på en anden server?

Men jeg vil prøve mig lidt frem. Tak for input :-)
Avatar billede erikjacobsen Ekspert
21. september 2014 - 09:35 #19
Det virker som det skal, så vidt jeg kan se med et lille eksperiment.

Med dit primære login kan du gøre alt med dine filer i de kataloger, der hører til dine domæner - ganske som du kan med login via FTP.

Men prøv - jeg ved jo ikke lige præcis hvad du laver ;)  Alternativt er selvfølgelig at bruge noget andet end gigahost. Med din egen virtuelle server, så kan du selvfølgelig alt - og prisen kan være ca den samme.
Avatar billede avminarm Juniormester
21. september 2014 - 11:21 #20
Hej Erik

Er dit eksperiment foretaget via phps FTP løsning?

Det jeg laver er noget opbevaring af billeder fra overvågningskamera :-) men de skal jo ryddes op jævnligt
Avatar billede erikjacobsen Ekspert
21. september 2014 - 11:41 #21
Nej, via fil systemet. En linie fra php-filen der køres via gigahosts cronjobs:

  unlink("../sub.some_funny_domain.dk/filderskalslettes.txt");
Avatar billede avminarm Juniormester
21. september 2014 - 13:03 #22
hej erik

Jeg får
Warning: is_dir() [function.is-dir]: open_basedir restriction in effect.

når jeg tjekker om en mappe findes i forvejen?hvis ikke mappen findes skal den oprettes.
Avatar billede avminarm Juniormester
21. september 2014 - 13:06 #23
dette gælder også mkdir()

Warning: mkdir() [function.mkdir]: open_basedir restriction in effect. File(../sub.domæne.dk/archive/NY_MAPPE) is not within the allowed path(s): (/home/www/domæne.dk/:/tmp/domains/2ff/domæne.dk/:/usr/share/php_binaries/include/) in /home/www/domæne.dk/FIL.domæne.php on line 55
Avatar billede erikjacobsen Ekspert
21. september 2014 - 15:00 #24
Det domæne du kører under har måske "safe_mode" slået til. Jeg mener det kan ændres pr (sub)domæne på gigahost
Avatar billede avminarm Juniormester
21. september 2014 - 19:31 #25
hmm ja safe mode er slået til og jeg kan se at i fremtidige php versioner er der ikke mulighed for at slå det fra! jeg kan godt nu - men kommer der 3 nye php udgivelser forsvinder muligheden i kontrolpanelet :-) så løsningen må gerne være lidt "langtidsholdbar".

Jeg tror jeg prøver at rode lidt med ftp løsningen - med mindre du har andre forslag eller forbehold for FTP løsningen.
Avatar billede erikjacobsen Ekspert
21. september 2014 - 19:38 #26
Jah, men det er nu lige omvendt ... man kan ikke slå det til i fremtidige versioner ;)
Avatar billede avminarm Juniormester
21. september 2014 - 21:52 #27
Det er da løgn :-) jeg ved ikke hvorfra jeg har fået den anden tanke - ok tak roder videre :-)
Avatar billede avminarm Juniormester
21. september 2014 - 22:18 #28
hmmm har lige prøvet igen - safe_mode slået fra på begge domæner og stadigvæk open_basedir fejlen?
Avatar billede erikjacobsen Ekspert
21. september 2014 - 22:56 #29
Slå det kun fra på (sub)domænet hvor PHP filen ligger - der er trods alt en lille smule sikkerhed i det. Jeg kigger efter om lidt efter andre indstillinger.
Avatar billede erikjacobsen Ekspert
21. september 2014 - 23:12 #30
Og så bruger den en gammel PHP 5.2 - ellers synes jeg ikke der er noget at komme efter.
Avatar billede avminarm Juniormester
21. september 2014 - 23:56 #31
Jeg har flyttet filen over på top domænet herfra skal den så slette osv på subdomænet, det er subdomænet brugeren har adgang til og derfor ikke så godt at loginoplysn ligger her.

Har vi talt forbi hinanden?
Avatar billede avminarm Juniormester
26. september 2014 - 13:21 #32
Hej igen

Jeg kan ikke kommer uden om openbase dir tingen - men jeg har lavet en løsning der kombinerer 2 filer.

Den første benytter FTP til at omdøbe nogen mapper og redirecter så til sidst til en fil på brugeres server der blot sletter en mappe og oprette den tom igen - så tusind tak for hjælpen begge to det fik mig i hvertf fald i den rigtige retning.

Erik jeg er blevet lidt nysgerrig - du skriver
Med din egen virtuelle server, så kan du selvfølgelig alt - og prisen kan være ca den samme.

Hvad mener du med det - kan jeg købe det ude i byen - eller mener du at jeg selv fysisk skal hoste en server? det kunne nemlig måske godt være interessant hvis man kan købe det ude i byen :-)
Avatar billede erikjacobsen Ekspert
27. september 2014 - 16:15 #33
Øv. Openbasedir er ikke et problem for mig. På gigahost.


Du skal ud i byen - det kan ikke svare sig at stående selv. Jeg har selv erfaring med digitalocean.com - kan man klare sig med en lille, så koster det $5 om måneden. Amsterdam er hurtigst i forhold til Danmark.

Det er så jo ret beset også nødvendigt at kende lidt til opsætning af server osv.
Avatar billede avminarm Juniormester
27. september 2014 - 17:49 #34
hmm underligt med openbase dir - jeg må gøre et eller andet galt?

Hvilken kode snip har du testet med? og hvad sker der hvis du f.eks. skifte php version til version 5.6 (den nyeste).
det irriterer mig lidt jeg ikke kan når du kan :-)

Jeg kigger lidt på digitalocean.com - men ja som du skriver det lidt server kendskab og der kommer jeg desværre lidt til kort :-)
Avatar billede erikjacobsen Ekspert
27. september 2014 - 18:33 #35
Jeg ved stadig ikke, om du får byttet lidt rundt på tingene. Der hvor dit fantastiske rydde-op PHP-script ligger, skal du slå safe-mode fra. Ikke der, hvor du vil ind og pille.

Versionen, som jeg bruger er PHP 5.2 - det vil være lidt besværligt at prøve noget andet. Lige nu.
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

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