[ mdostanic @ 24.07.2007. 13:24 ] @
Pocetnik sam u PHP, i jako me interesuje: Koji nacin koristiti za konektovanje na MySQl bazu?
Evo u cemu je problem. Skoro mi se desilo da nemogu da se konektujem na bazu (preko php skripta) posto sam je postavio na server host provajdera. Nazvao sam ih i oni su mi rekli da taj metod koji sam ja koristio ne moze da se izvrsi kod njih na serveru posto oni nemaju podeseno to sa mysqli klasama ili kako to da kazem, ispravite me...
Evo taj metod:

Metod broj 1

Code:
$baza = new mysqli ('localhost','user','pass','db');
$upit = "select * from vesti";

$rezultat = $baza -> query ($upit);
$broj = $rezultat -> num_rows;

for ($i; $i<$broj; $i++)
{
  $row = $rezultat -> fetch_assoc();
  echo 'ID je: <b>';echo $row['id']; echo '</b><br />';
  echo 'VEST je: <b>';echo $row['vest']; echo '</b><br /><br />';
}

$baza -> close();



Zato sam morao ovaj da koristim i on je radio za razliku od prvog:

Metod broj 2

Code:
$host = "localhost";
$usr = "user";
$pass = "pass";
$base = "db";

$baza = mysql_connect ($host, $usr, $pass) or die ("Problem sa konektovanjem na bazu...");
@ mysql_select_db ($base) or die ("Problem nastao pri konektovanju na selektovanu bazu...");
$upit = "select * from vesti";

$rezultat = mysql_query($upit);
$broj = mysql_numrows($rezultat);

for ($i=0; $i<$broj; $i++)
{
  $id = mysql_result($rezultat,$i,"id");
  $vest = mysql_result($rezultat,$i,"vest");
  echo 'ID je: <b>'.$id.'</b><br />';
  echo 'VEST je: <b>'.$vest.'</b><br /><br />';
}

mysql_close($baza);



Sad mene interesuje... o cemu se tu radi i koji metod je bolji... i koji je bolje koristiti... ?
Mislim da sam cak video jos nekih metoda negde, pa ako neko zna nek i njih napise.
Neznam da li sam se dobro izrazio kad sam reako "metode"... mislim na nacine...

Da li je bezbedno ovako cuvati lozinke i korisnicka imena kao u ova dva primera (metoda)?

Unapred hvala.

izmena: Nemanja: Kod u [code] tagove!

[Ovu poruku je menjao Nemanja Avramović dana 24.07.2007. u 16:07 GMT+1]
[ dakipro @ 24.07.2007. 13:40 ] @
Iskreno, mislim da ovaj prvi nacin nikad nisam video da neko koristi.
Da, bezbedno je ovako cuvati sifre, dokle god apache ne "prsne".
[ mb_sa @ 24.07.2007. 15:33 ] @
Pa prednost koristeja mysqli ekstenzije je sto ima proceduralni i OO interfejs, tj. sintaksu - ko sta vise voli to i koristi! Mnogi navode da je brža i sigurnija od 'stare' mysql ekstenzije.

I kod drugog nacina, treba izbjegavati mysql_result() funkciju, ako se 'vracaju ogormni rezultati' - tada je bolje korstiti neku od 'fetch' funkcija, jer su mnogo brže od mysql_result().
[ 1r0nM4n @ 24.07.2007. 17:04 ] @
Citat:
Da, bezbedno je ovako cuvati sifre, dokle god apache ne "prsne".

Ne bih baš rekao . Bezbedno je ako imaš dedicated server ili VPS. Na shared serverima, postoji mogućnost da ostali korisnici servera mogu da pročitaju i tvoje fajlove, pogotovo ako korisnici imaju SSH pristup. Čak može da se napiše jednostavna PHP skripta koja će da "čita" tuđe fajlove. Ili, perl skripta ako PHP ima neka ograničenja (safe mode, openbase dir, itd..). Naravno, sve ove komplikacije mogu da se izbegnu ako admin servera lepo podese sve dozvole, i običnih korisnika i http servera.
Ako pogledata modove vaših fajlova na (linux) serveru, videćete da skoro svi fajlovi imaju mod 644, a ova boldovana četvorka znači da bilo ko može da čita vaše fajlove (naravno, ako ima pristup serveru, a to može da bude na više načina, kako onih legalnih, tako i ilegalnih).

p0z
[ dakipro @ 24.07.2007. 17:22 ] @
Slazem se da moze da im pristupi, mada treba dosta srece pogadjati putanju fajla, naziv promenjivih itd... Kako cuvati onda cuvati te parametre?
[ mdostanic @ 24.07.2007. 18:50 ] @
Citat:
Pa prednost koristeja mysqli ekstenzije je sto ima proceduralni i OO interfejs, tj. sintaksu - ko sta vise voli to i koristi! Mnogi navode da je brža i sigurnija od 'stare' mysql ekstenzije.

Eto ja sam tako i poceo da ucim sa mysqli... tako sam i navikao... ovo i na kraju i znaci improved... verovatno i jeste to bolje... ali eto kao sto sam i rekao kod nekih hosting provajdera se tako ne moze raditi... moraju ove starije metode da se koriste. Verovatno imaju neki MySQL 3.x ili 4.x. Kad budem trazio neki hosting sledeci put obavezno moram pitati da li podrzavaju tu mysqli metodu.
[ dakipro @ 24.07.2007. 19:23 ] @
Nauci covek ponesto svaki dan ;)
Mada, gotovo uvek koristim adodb lite, ali za neke sitne stvarcice, koristim stari, prvi metod.
Koji je okvirno procenat hostinga koji (ne)podrzavaju ovu metodu i koje su joj (prakticne) prednosti u odnosu na staru metodu i eventualno u odnosu na adodb?
P.S. Sve vreme sam povezivao ovo sa sql lite, ne znam zasto :))
[ Tyler Durden @ 24.07.2007. 19:54 ] @
Svi kojima je php 4.x default (ili jedina) verzija ne podrzavaju ovo.
Takodje, mislim da je mali broj i onih koji furaju verziju 5 a imaju ovo obavezno ukljuceno. Mada mislim da ce polako da se ukljucuje...
[ 1r0nM4n @ 24.07.2007. 19:55 ] @
Citat:
dakipro: Slazem se da moze da im pristupi, mada treba dosta srece pogadjati putanju fajla, naziv promenjivih itd... Kako cuvati onda cuvati te parametre?

Pa i ne mora da se pogađa. Pomoću komandi kao što su ls, find, cat... mogu se pronaći i pogledati ti fajlovi. Pogledaj PHP shell-ove kao što su c99 ili r57 i iznenadićeš se kada budeš video šta oni sve mogu. Zato je (PHP) Include Vulnerability (Remote ili Local) vrlo neprijatna stvar. (Local zato što se može ubaciti PHP kôd u .jpg, .gif, .png... fajl, i ako taj sajt ima forum sa mogućnošću upload-a avatra, onda PHP kôd "završava" na serveru i čeka da bude include-ovan )

Kako se zaštiti... Može se zatražiti od admina servera da ubaci konstante (i dodeli im potrebne vrednosti) u podešavanja web servera (apache).
I onda bi ti u svojim .php skriptama koristio ovo:
Code:
mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD); 


Ima tu još dosta priče, ali da ne dužim previše..

p0z
[ dakipro @ 24.07.2007. 20:15 ] @
Cek, cek... Mozda odosmo sa teme u bezbednost, ali ako uspe da pristupi fajlovima, pomocu ovih "malicioznih" kodova, dal bi onda mogao da pristupi i konstantama DB_SERVER, DB_USER, DB_PASSWORD ? Mislim, ako ja iz mojih fajlova, mogu da im pristupim, a neko inkluduje moj fajl, onda bi trebalo da moze i on da im pristupi (ili ne :( ) ?
Imas li neki koristan link (iz prve ruke) na ovu temu?
[ 1r0nM4n @ 24.07.2007. 21:01 ] @
Pogledaj PM..
[ Nemanja Avramović @ 24.07.2007. 21:01 ] @
Može da im pristupi i može da ih echouje
[ 1r0nM4n @ 24.07.2007. 21:32 ] @
http://phpsec.org/projects/guide/sr/5.html
Pri dnu:
Citat:
Dobro rešenje je da smestite sve osetljive podatke u bazu podataka i koristite tehnike pomenute ranije (gde $_SERVER['DB_USER'] i $_SERVER['DB_PASS'] sadrže parametre pristupe) da bi zaštili svoje parametre pristupa bazi podataka.

Najbolje rešenje je da koristite privatni hosting.

Ne znam više ni ja šta je bezbedno a šta ne.. U svakom slučaju, ja imam privatni hosting (kako kaže ova rečenica) koji sam administriram, tako da nemam problema da mi neko gleda .php fajlove

p0z
[ Miroslav Ćurčić @ 24.07.2007. 21:35 ] @
Sve što je potrebno PHP skriptu da bi radio (varijable, konstante, spoljne datoteke/resursi, $_ENV, ...) može i da se ehuje.
Nema pouzdanog načina kako zaštiti lozinke u skriptovima.

Najbolje što sam do sada video je kodirati lozinku negde u skripti (ili u *.ini) a skript gde je funkcija dekodiranja je zajedno sa uspostavljanjem konekcije na DB i autentifikacijom korisnika (iz kukija/sesija), kodiran nekim boljim koderom (zendencoder,ioncube,...).
[ dakipro @ 25.07.2007. 10:23 ] @
To mu na kraju dodje, da je na shared hostingu, najsigurniji "moguci" nacin cuvati ih regularno u php fajlu, pa APP (Ako Prodje-Prodje). Osim ako hosting ne daje neke od gore navedenih mogucnosti.

Citat:

Dobro rešenje je da smestite sve osetljive podatke u bazu podataka i koristite tehnike pomenute ranije (gde $_SERVER['DB_USER'] i $_SERVER['DB_PASS'] sadrže parametre pristupe) da bi zaštili svoje parametre pristupa bazi podataka.

Najbolje rešenje je da koristite privatni hosting.


Da, al u konkretnom slucaju mu ovo dodje princip "Kljuc je u konzervi" jer mora da se pristupi bazi da bi se izvukli parametri za konekciju na bazu
[ mdostanic @ 28.08.2007. 21:15 ] @
A koliko je "opasno" nezatvoriti bazu... mysql_close($baza);....
[ dakipro @ 28.08.2007. 21:30 ] @
Pa teoretski, server (ili beshe php) je sam zatvori...
Iskreno, ja se ne secam da sam ikada (namerno) zatvorio konekciju i niko se do sada nije zalio
Interesanto pitanje, moracu da potrazim misljenja struchnijih...
[ flylord @ 28.08.2007. 21:36 ] @
bolje zatvaraj, jer moze da se desi da otvoris veliki broj konekcija, i da tako mysql dodje do limita u broju konekcija, i posle toga, vise niko ne moze se zakaci za njega. Na shared hostingu to pogotovo moze da se desi.
[ dakipro @ 28.08.2007. 21:46 ] @
E to mi se chesto desavalo na loopiji, a uvek me mrzelo da gledam zasto
Ali definitivno nije do moje aplikacije
A kako ide sa persistent konekcijama i bez njih? jel moze onda da dodje do zagushenja konekcija?
[ flylord @ 28.08.2007. 22:47 ] @
hehe, moze i sa njima, i to veoma lako. ONe se tek ni malo ne preporucuju na shared hostinzima. Jer svaka skripta pokrene svoju konekciju a ne zatvori je :) , i ako imas malo poseceniji sajt sa malo vise php skripti koje pozivaju bazu , eto belaja.
[ centaur @ 28.08.2007. 22:54 ] @
@flylord
Da li je moguce da se skripta izvrsi a da konekcija ka bazi ostane otvorena?
[ Miroslav Dostanić @ 08.11.2007. 13:06 ] @
Malo pre mi je receno, kad sam zvao jedan hosting provajder, da oni imaju ukljucenu ovu mysqli metodu, a imaju php4...
Da li je to moguce? Meni se cini da sam negde procitao da je samo php5 podrzava kao i da tek od php5 pocinje OOP.

Znaci interesujeme dali ovaj metod broj 1 koji sam naveo mogu da koristim pod php4?
[ dakipro @ 08.11.2007. 13:16 ] @
Hoces ja da ti kazem da pogledas u manual ili ces sam to da uradis?
OOP pocinje pre php5.