Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

php-mysql-manager.php

[es] :: PHP :: PHP za početnike :: php-mysql-manager.php

[ Pregleda: 2175 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.broadband.blic.net.

Sajt: www.knjigaimena.com


+5 Profil

icon php-mysql-manager.php10.06.2010. u 19:20 - pre 168 meseci
Pozdrav.
Početnik sam u PHP programiranju ali sam ipak se odvažio da radim sajt sa njim pa sam odlučio da napravim sebi par pomoćnih skripti između kojih je i ova za rad sa mySql bazom.
Code:

<?php

    $user="***********";
    $password="***********";
    $database="***********";
    
    function ExecuteQuery($p_query, $p_parametars)
    {
        global $user;
        global $password;
        global $database;
        try 
        {
            $query = $p_query;
            $conn = mysql_connect('localhost', $user, $password) or die( mysql_error());
            if (!$conn) 
            {
                return null;
            }            
            $db_selected = mysql_select_db($database, $conn);
            if (!$db_selected) 
            {
                return null;
            }    
            $query = '';
            $temp = $p_query;
            foreach ($p_parametars as $key => $value) 
            {
                $pKey = "#p" . $key . "#";
                $pos = strpos($temp, $pKey);
                if($pos !== false)
                {
                    // Dio pre parametra stavljamo u query.
                    $query .= substr($temp, 0, $pos);
                    //dodajemo zamjenjen parametar na query.
                    $query .= mysql_real_escape_string($value);
                    //u temp uzimamo ono što je nobrađeno.
                    $temp = substr($temp, $pos + strlen($pKey));        
                }
                else
                {
                    //nije nađen kay $pKey u tempu
                    continue;
                }                
            }
            //ako je nešto preostalo dodajemo na query.
            $query .= $temp;
            return mysql_query($query);            
        }
        catch(Exception $e) 
        {
        }
        return null;
    }    
?>


Naime kako ovo radi, tj koristi se.

Primjer.
Code:

        static function LoginUser($p_username, $p_password)
        {
            $parametars[0] = $p_username;
            $parametars[1] = MD5($p_password);
            $query = "SELECT * FROM Users WHERE username='#p0#' and password='#p1#'";
            $sqlResult = ExecuteQuery($query, $parametars);
            ...


Imao sam na cilj da se na jedinstven način konektujem na bazu, a istovremeno da se ne zamaram stalnom tim djelom koda koji bi se stalno ponavljao.
Gledajući primjere za rešavanje SQL injection mislim da sam ga riješio. jer ako se
pozove
Code:

        LoginUser("Cola's", "test");

dobijem SQL query a sve zahvaljujući funkciji mysql_real_escape_string
Code:

        SELECT * FROM Users WHERE username='Cola\'s' and password='098f6bcd4621d373cade4e832627b4f6'


takođe sam izdvajao parametre da slučajno nebih replejsovao nešto što je korisnik prosledio

Npr. za
Code:

        LoginUser("Co#p1#la's#p1#", "test");

dobijem:
Code:

        SELECT * FROM Users WHERE username='Co#p1#la\'s#p1#' and password='098f6bcd4621d373cade4e832627b4f6'


Ako je ovo dobro imalo drago mi je da to neko iskoristi ali ako ima propusta takođe bi volio da mi ukaže na njih

Gdje se na sajtu čuvaju parametri za pristup bazi? Jel nesigurno ovako u fajlu? Ako nije sigurno gde se to inače drži?

Hvala

[Ovu poruku je menjao Cola dana 10.06.2010. u 20:47 GMT+1]
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: php-mysql-manager.php11.06.2010. u 06:36 - pre 168 meseci
Nije 100% posto sigurno ali ja ne znam za drugi nacin kako cuvat. Postoje zato "permissions" u MySQL koje mozes dodjelit tom korisniku i definisat sta moze a sta ne raditi na bazi - mada ni to opet nije sigurno u slucaju da imas nekih podataka koji se ne bi smjeli vidjet....

U ovoj funkciji, mislim, da ne valja sto ce se pri svakom query-ju otvarati konekcija ka bazi zato sto si stavio mysql_connect() unutar nje. Radije se konektuj u header/bootscap fajlu, a najbolje kreiraj instancu MySQLi objekta.

Moderatori bi ovo mogli prebacit u PHP za pocetnike ?!

P.S. zasto si napravio bas ovako funkciju sa parametrima ( cemu ovaj drugi parametar ) ?
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: php-mysql-manager.php11.06.2010. u 06:55 - pre 168 meseci
Ovaj drugi parametar mi služi da u SQL izraz prosledim parametre koji će se zamjeniti, ali sa funkcijom mysql_real_escape_string a ne da se ja time brinem.
tj prosledim parametre one se sve lepo smesti.

Oki hvlala na predlogu moraću da izmestim konektovanje...
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: php-mysql-manager.php11.06.2010. u 07:10 - pre 168 meseci
A sto nisi onda ovako nesto :)

Code:

function db_query($query)
{
   try
   {
      return mysql_query( mysql_real_escape_string($query) );
   }
  catch(Exception $e) 
  {
  }
  return null;
}
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: php-mysql-manager.php11.06.2010. u 09:17 - pre 168 meseci
pa nisam tako jer želim da u SQL query-ju ostanu apostrofi koje sam ja definisao

ako ja napišem
Code:

SELECT Ime + '  ' + Prezime FROM Korisnik WHERE KorisnickoIme = '#p0#' 

i prosledim "Cola's"
želim da moji navodnici ostanu tj da izraz izgleda ovako
Code:

SELECT Ime + '  ' + Prezime FROM Korisnik WHERE KorisnickoIme = 'Cola\'s' 

a ne
Code:

SELECT Ime + \'  \' + Prezime FROM Korisnik WHERE KorisnickoIme = \'Cola\'s\' 

ako bi celil SQL query podvrgnuo toj metodi
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: php-mysql-manager.php11.06.2010. u 09:59 - pre 168 meseci
Code:

static function LoginUser($p_username, $p_password)
        {
            $parametars[0] = $p_username;
            $parametars[1] = MD5($p_password);
            $query = "SELECT * FROM Users WHERE username='#p0#' and password='#p1#'";
            $sqlResult = ExecuteQuery($query, $parametars);
            ...


Moglo je to i bez tih foreach, strpos, substr - samo u gornji kod umjesto sto punis niz $parametars -> primjenit mysql_real_escape_string() na $p_username i $_p_password i dobio bi istu stvar. Onda bi mogao i pozvat obicnu mysql_query() funkciju.
U svakom slucaju dobro je sto mislis na sigurnost baze i sto filtriras podatke dobijene od korisnika. Evo jedan link pa malo procitaj ima dosta dobrih stvari: http://phpsec.org/projects/guide/sr/
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: php-mysql-manager.php11.06.2010. u 10:13 - pre 168 meseci
Da slažem se da sam mogao odmah to da uradim ali bi za neki sledeći upit takođe morao to da pišem i tako stalno
Naravno ja sam naveo samo jedan primjer a za njega i nema smisla praviti ovakvo nešto.
U projektu ću imati mnogo poziva prema bazi pa da nebi svaki put pisao kod lakše mi je napisati f-iju koja prima parametrizovan upit i parametre.

ideja i jeste bila da:
1. napišem parametrizovan upit
2. napunim parametre (bez da ih ja svaki put mijenjam sa onom funkcijom)
3. pozovem funkciju ExecuteQuery i sve joj to prosledim a ona se pobrine za ostalo (zamjenu parametara, sigurnost i sve ostalo što kasnije još nadogradim na nju a što sam sada propustio)

Hvala za link pregledao sam samo onako površno da vidim čega ima i čini mi se da je dobro, svakako ću ga detaljno prostudirati :)



 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.3.nat.stcable.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: php-mysql-manager.php11.06.2010. u 10:30 - pre 168 meseci
Meni jedino bode oci onaj try...catch blok. Prvo, nista od tih funkcija ne baca exception. Drugo, cak i da nesto baca exception, try...catch blok obuhvata preveliki komad koda. Evo jednog dobrog teksta o exception-ima http://phpadvent.org/2009/exceptional-php-by-brandon-savage
 
Odgovor na temu

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.lanaco.com.

Sajt: www.knjigaimena.com


+5 Profil

icon Re: php-mysql-manager.php11.06.2010. u 10:35 - pre 168 meseci
Kao što sam rekao u prvom postu "početnik sam u PHP-u" :)

a ako ništa ne baca Exception onda još bolje sve se da obraditi, tj u ovom slučaju bi se moglo i izbaciti :) tnx
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: php-mysql-manager.php

[ Pregleda: 2175 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.