Gå til innhold

gjemme mysql passord i php/jsp


Anbefalte innlegg

Det er en tråd i et annet forum som har sporet helt av, så jeg oppretter en ny tråd her, så kanskje noen eksperter kan komme opp med en løsning.

 

(

Det er ikke nødvendig å lese den avsporede tråden. En problembeskrivelse følger, men for de som likevel vil ha link:

http://forum.hardware.no/index.php?showtopic=167942&hl=

)

 

Det dreier seg om en side hvor man trenger å ha lagret mysql passordet i php fila, på en slik måte at andre brukere på localhost ikke får tilgang til kildekoden av fila, og kan se passordet. Jeg har engang sett en genial løsning på dette, men finner ikke tilbake.

 

Webserveren er apache på linux.

 

Det som gjør denne saken litt spesiell er at websiden skal være tilgjengelig på web, må den være leselig for verden. Personen som lager denne websiden er en vanlig bruker, uten noen form for administrativ tilgang på systemet. Han har heller ikke mulighet til å bruke chown til å sette apache som eier av fila.

Det er et ganske stort system (NTNU med 20.000 brukernavn) så det blir klønete å be system admin om tjenester hver gang man lager en ny fil.

 

Sett f.x. at han skal lage en gjestebok, hvor folk, uten å skrive inn passord, skal kunne legge igjen sin hilsen. Da må vel mysql passord må stå i fila (eller en include fil, som også må være(?) lesbar fra web)

 

Det er hundrevis av andre brukere i samme brukergrupper som ham, og målet er altså å hindre disse brukerene (og brukere forøvrig) i å få tilgang på kildekoden hvor mysql passordet står.

Måter de kan gjøre dette akkurat nå er f.x.

cat /local/www.stud/users/brukernavn/filnavn.php

Alternativt kan de lage et eget php script som kjører via webserveren og som lister innholdet i /local/www.stud/users/brukernavn/filnavn.php for på den måten å accessere fila som apache bruker, og få ut innholdet i rent tekstformat.

 

Selv om man setter mysql databasen som kun tilgjengelig fra local host, kan jo disse brukerene komme seg inn.

 

Ekspert råd?

 

-pg

Lenke til kommentar
Videoannonse
Annonse

Selvsagt har man flere brukere.

Spørsmålet er fortsatt: hvordan gjøre så passordet for å koble seg til databasen ikke blir avslørt?

 

NTNU kjører mysql 3.23. Hvis man f.x. skal lage en litt mer avansert database trenger man muligheten til å lage temporary table. Man trenger også update rettigheter, og med versjon < 4.0 kan man ikke gi så spesifike rettigheter i database.

Å kunne skjule passordet i php fila (eller en include fil) er da en nødvendighet.

Lenke til kommentar

vet om at i perl kan komandoer skrives ufårståelig for *vanlige* mennesker f.eks (advarsel: rm -rf ,så IKKE PRØV Å KJØRE DET)

perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see

 

så tenkte om det mulig å bruke noe lignende rett i php/jsp kode; ellers finnes det noe som ligner på ceaser cypher på en måte ellers.... flere brukerer er bra ,men med hensyn på at f.eks jeg har polls på siden min ,der den vanlige bruker kan oppdatere databasen ,og dermed alle på nettverket får tilgang til å forandre de spørmåler og varianter jeg spører om.... ikke bra

 

P.s. men hvis ceaser mulig ,kan da noen bruke det samme fil for å parse passord? (tviler på :( )

Endret av simonj
Lenke til kommentar

Jeg ser for meg følgende alternativ for flerbrukssystemer (først og fremst *nix, windows tør jeg ikke tenke på engang)

 

Uansett: lage en begrenset bruker som kun har select og insert rettigheter. dette kan man gjøre på ntnu, og jeg har laget egne skript for å gjøre dette enkelt og greit på egne systemer (da ntnu ikke ville gi fra seg disse -> latterlig)

 

*) kompilere kode, kjerneskript kan kjøres som binærfiler. det finnes kompilatorer for perl og php, men det som kan kompileres kan også dekompileres, men det krever litt innsats. filtrerer bort mange potensielle kikkere

 

*) skramble kode, noe ala perl linken over eller eksemplet postet over. resultatet er omtrent det samme, skriptet gjøres ugjenkjennelig. jeg vil tro det muligens er lettere å reversere dette enn kompilert kode.

 

*) apache "auto prepend" directives. har ikke satt meg inn i hvordan dette kan brukes med tanke på sikkerhet, men dette kan vanskelig gjøres uten i kombinasjon med neste punkt...

 

*) suid/sudo, dette bør være mulig å gjennomføre. sikkerhet er en annen sak. det er såkalte racing issues i kjerna, idet man kan hoppe inn etter at systemet leser she-bang og koden utføres, og smette inn sin egen kode. suidperl har minimert denne riskern så godt det lar seg gjøre.

 

*) suid/sudo. det sikkreste såvidt jeg kan se

Lenke til kommentar

leopard:#om chown:

leopard:~/public_html/progz/beta$ chown :apache include.txt

chown: `:apache': invalid group

leopard:~/public_html/progz/beta$ chown :httpd include.txt

chown: changing group of `include.txt': Operation not permitted

 

mer enn det ,jeg har funnet en ganske *morsomt* script (info fra freshmeat.net) , den fungerer ikke som den skulle ellers den klarer å lage en cache-fil med rare egenskaper:

leopard:~/public_html/progz/beta/fase4_rdf/cache$ ls -l

total 0

-rw-r--r-- 1 httpd httpd 0 2003-11-13 19:16 0bcdbd6f804fa44dc4eb981009f397dd

:wow: wow, mens jeg har ikke lov å gjøre noe sånt. whattaf*?!?

p.s. (jeg har ikke peiling i php)

Endret av simonj
Lenke til kommentar

Jeg kan ikke se for meg at noe vil fungere, du kan som over filtrere bort mange intrengingsforsøk. Men har apache tilgang til fila for deg, har den også tilgang for andre brukere altså, om du includer en fil uansett om den er kopilert, cryptert, hashet, scramblet, gjemt, så kan andre brukere på localhost gjøre det samme. De kan lage et script som includer fila og conecter til localhost, og så f.eks dumpe hele databasen. Greit nok de får kanskje ikke tilgang på passordet i rentekst, men de kan som sakt gjøre alt annet...

 

Siden det skal ligge på NTNU må det være av educational purposes, og da kan du jo bare generere et 'tilfeldig' passord og gi ****** i om dem får tak i det. Skal du ha en kommersiell side, bør du kjøre opp en egen server så du har mer kontroll.

Lenke til kommentar

2lansiden.no: 'educational purposes' - akkurat! sånt som du sier blir det:

hva er mening med å lære unger gå??? - kjøp dem rollestol ,så har de mer kontrol over konsekvenser av tyngdekraften!!!

-selve meningen er i å lære hvordan [wildcard].

Endret av simonj
Lenke til kommentar

men det går ikke ann å bruke i sammenheng med .htaccess (jeg har ikke kommet så langt enna...) ,men hvis det bare for bruk i selve httpd conf, da blir det mye bedre å bruke SSL.... hmmm ,men hvordan virker .dat og hvordan kan man skrive jsp kode i bin(/hex)-format med mulighet til at serveren skal kunne parse det???

Endret av simonj
Lenke til kommentar

Hmmm

Kan du ikke bare lagre det på serveren i PHP, så får jo ikke de som går inn på sida se noe, eller er det satt opp slik på NTNU at du ikke har mulighet til å lagre det så det bare blir read til webserver og deg, og ingen andre?

EVT kan du leke deg med gpg...

Lenke til kommentar
jo, den *må* å være world readable (prøv selv) med mindre du suid'er apache/nobody eller noe annet lurt.

Det eg meinte med world readable, er at den ikkje ligg i ei mappe som Apache ikkje har tilgang til. Normalt vil det vere home-mappa di (det er det i så fall på NTNU). Du kan så inkludere den fila i PHP/JSP, men Apache vil aldri gje ut den fila.

 

Sjølvsagt er det mulig å bryte seg gjennom dette og, men særlig betre beskyttelse enn dette får du nok ikkje om du ikkje kontrollerer serveren sjølv.

Lenke til kommentar

alle filer du inkluderer, må være world readable, for å bruke filer på hjemmekatalogen, må for det første hjemmekatalogen være worldl executable og php fila må være lesbar.

 

Å gjøre dette, hjelper deg ingenting hvis du vil stoppe brukere med local shell access (nå har du i tillegg gjort hjemmekatalogen din tilgjengelig for dem!)

 

så lenge mysql-passord liggler i en phpfil, så vil den parses likevel, så å ha mysqldata i en php fil på web-området ditt er som regel ikke noe problem.

Lenke til kommentar
  • 2 uker senere...

Jeg har d samme problemet.

Alle websidene mine ligger i /www

der har jeg ei fil som mysql passordene og sånt ligger.

Da alle brukerne kan

 

cat /www/****.php <-- som er filen med passordet.

 

Så hvordan skal jeg få ordnet slik at dette ikke kan gjøres.

Kjedelig da brukere kain få tilgang til sql databasen til denne siden

Lenke til kommentar

Jeg har d samme problemet.

Alle websidene mine ligger i /www

der har jeg ei fil som mysql passordene og sånt ligger.

Da alle brukerne kan

 

cat /www/****.php <-- som er filen med passordet.

 

Så hvordan skal jeg få ordnet slik at dette ikke kan gjøres.

Kjedelig da brukere kain få tilgang til sql databasen til denne siden

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...