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

Misljenje o login skripti

[es] :: PHP :: PHP za početnike :: Misljenje o login skripti

[ Pregleda: 2476 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedja995

Član broj: 309141
Poruke: 55
212.200.84.*



+1 Profil

icon Misljenje o login skripti20.06.2013. u 18:31 - pre 81 meseci
Pozdrav pravim login skriptu i cilj mi je da bude shto sigurnija.pravio sam vec neshto par puta i slabo mi ide ali sad sam upotrebio oop i skembo sam neshto ali nisam siguran da nisam promashio sve koristeci objekte.A i zanima me taj deo cuvanja mysql lozinke npr dovoljno je sigurno kada se taj .php fajl koji je npr kod mene DB.php postave na web space normalno u onaj folder gde se sajt postavlja (na kompu htdocs na netu ne znam kako se zove jednom davno sam koristio web hosting neki)
da li ima neko mesto na web hostingu gde se takve stvari stavljaju??sredio sam je shto sam bolje mogao ako neshto nerazumete pitajte koristio sam malo eng malo srpski zato shto mi je tako lakshe.

DB.php
Code:
<?php
class DB {        
    private static $host = "localhost";
    private static $dbUsername = "root";
    private static $dbPass = "root";
    private static $dbBase = "proba";
    
    function connect($odabir) //true za konektovanje false za diskonektovanje
    {
        if($odabir==true)
        {
        mysql_connect(DB::$host,DB::$dbUsername,DB::$dbPass) or die("Greshka pri spajanju na mysql " . mysql_error());
        mysql_select_db(DB::$dbBase) or die("Greshka pri spajanju na bazu!".DB::$dbBase . mysql_error());
    
        }
        else 
        {
            mysql_close() or die("Greshka pri zatvaranju mysql konekcije!" . mysql_error());
        }
    
    }

    function doQuery($query) //pali konekcija obradjuje mysql query i zatvara je
    {
        $this->connect(true);
        mysql_query($query) or die("\nGreska pri izvrshenju mysql upita!");
        $this->connect(true);
    }
        
    function addLoginAdmin($adminId,$sessionId) //dodaje admina kad se loguje u mysql tablicu logedadmins
    {
        $this->connect(true);
        $sqlAddLogin="INSERT INTO logedadmins (adminId, sessionId) VALUES ( '$adminId', '$sessionId' )";
        $this->doQuery($sqlAddLogin);
        $this->connect(false);        
    }
    
    // Return mysql_query result (use mysql_fetch_array($loginAdmins)) 
    function getLogedAdmins()
    {
        $this->connect(true);
        $sqlGetLogedAdmins="SELECT * FROM logedadmins";
        $loginAdmins=mysql_query($sqlGetLogedAdmins);
        $this->connect(false);
        return $loginAdmins;
    }
    
    function deleteLogedAdmin($sessionId) //koristim je samo u logout funkciji
    {
        $this->connect(true);
        $sqlReq="DELETE FROM logedadmins WHERE sessionId='$sessionId'";
        $this->doQuery($sqlReq);
        $this->connect(false);
    }
            
    // Return mysql_query result (use mysql_fetch_array($regAdmins))
    function getRegAdmins() //Koristim je u slucaju logovanja radi provere postojanja username i passworda unetih
    {
        $this->connect(true);
        $sqlGetRegAdmins="SELECT username,password FROM admins";
        $regAdmins=mysql_query($sqlGetRegAdmins);
        $this->connect(false);
        return $regAdmins;
    }
}
?>


Pristup.php
Code:
<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT']."/taxi/DB.php");
class Pristup {
    
    //KONSTANTE
    static $inputMax = 50;
          
    function checkInput($input)
    {
        //proveravace ulaz 
    }
    
    function isValidUnamePass($username,$password) //Proverava da li uneti username i pass postoje u bazi
    {
        $db=new DB;
        $admins=$db->getRegAdmins();
        while($adminRed=mysql_fetch_array($admins))
        {
            if($adminRed['username']==$username && $adminRed['password']==$password)
            {
                return true;
                break;
            }
            
        }        
    }
        
    function login($uName,$pass)
    {
        if($this->checkInput($uName) && $this->checkInput($pass))
        {

            if ($this->isValidUnamePass($uName,$pass))
            {                
                $_SESSION['adminId']=$uName;
                $_SESSION['sessionId']=session_id();
                $db=new DB();
                $db->addLoginAdmin($uName, $_SESSION['sessionId']);
            }
        }        
    }

    function logout()
    {
        if(isset($_SESSION))
        {
            $db = new DB;
            $db->deleteLogedAdmin(session_id());
            session_destroy();
            //Dodacu i kod za cuvanje vremena logovanja i logouta
        }
    }

    function dozvola() //Stavljam je samo na admin strane
    {
        if(!(isset($_SESSION)))
        {
            //redirekcija na stranicu login
        }
        else if(isset($_SESSION['sessionId']))
        {
            $db=new DB();
            $sesArr=$db->getLogedAdmins();
            while($adminSes=mysql_fetch_array($sesArr))
            {
                if($adminSes['sessionId']==$_SESSION['sessionId'])
                {
                    echo "LOGOVANI STE KAO: " . $_SESSION['adminId'];
                }
                else 
                {
                    //Ovo bi mogao da svatim kao pokushaj upada??(kloniranje sesije??)
                    //ako mogu mislio sam da napravim klasu sa funkcijama koje ce da mi  
                    //cuvaju sve probleme i ip adresu i sve shto mogu da pokupim od informacija
                    //i koristio bio je na josh neka mesta
                }
            }
    
        }
        
    }    
}
?>


shta mislite o nacinu na koji radi skripta (na zashticenim stranicama bi pravio objekat Pristup i koristio funkciju dozvola(), tamo gde treba login pravio bi objekat Pristup i koristio login() f-ju gde mi bude trebao ispis iz baze a to cu josh da ubacim f-je u DB klasu pa bi pravio objekat klase i vadio ispis)??Da li je u tome fora OOPa da li se tako koristi??da li je potrebno da pravim klasu koja ce da mi cuva probleme na sajtu(poznajem samo mysql_errno() i mysql_error() fje a mislim da ih ima josh??)funkciju checkInput moram josh da napravim i koliko znam bice mi potrebna ona preg_match() fja ali mi je josh nejasno njeno koristenje i ono mysql_escape.... cu da ubacim unutra i ako imate josh neki savet?
Hvala na posvecenom vremenu :D
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti20.06.2013. u 19:14 - pre 81 meseci
1. Koristi PDO http://php.net/manual/en/book.pdo.php
2. Pogledaj ovo http://stackoverflow.com/quest...g-convention-to-follow-for-php
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
212.200.84.*



+1 Profil

icon Re: Misljenje o login skripti20.06.2013. u 19:23 - pre 81 meseci
hvala na brzom odgovoru i za PDO
a sa ovim trecim si verovatno mislio da svako ima svoj nacin programiranja i da postoje frameworkovi ali mene zanima da li je ovo shto sam napisao ispravno??
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti20.06.2013. u 19:58 - pre 81 meseci
Citat:
Nedja995: hvala na brzom odgovoru i za PDO
a sa ovim trecim si verovatno mislio da svako ima svoj nacin programiranja i da postoje frameworkovi ali mene zanima da li je ovo shto sam napisao ispravno??


Nemam vremena da testiram sada to sve, sa ovim pod 2 sam ti htio reci da treba da pogledas PHP coding style, tj. ne treba da ti bude cilj napisati samo code koji radi i to je to, nego treba da napises code u kom se moze snaci bilo ko pa i ti za par godina kada ga pogledas. I pogledaj ovo jos(ne framework nego coding style, mada ne bi bilo lose i framework da pogledas) http://kohanaframework.org/3.0/guide/kohana/conventions
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
212.200.84.*



+1 Profil

icon Re: Misljenje o login skripti20.06.2013. u 21:21 - pre 81 meseci
pozdrav Mladjox hvala na ovim korisnim informacija proucicu obavezno to shto si mi postavio
kod radi nema potrebe da ga testirash nego me je zanimalo neshto shto je izgleda pocetnicko pitanje a nisam stavio u pravi podforum hteo sam samo misljenje o konkretnom kodu da li sam dobro upotrebio funkcionalnost phpa poshto sam pocetnik ili me ti nisi razumeo ili ako sam pogreshio podforum molim moderatore da pomere temu
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti20.06.2013. u 22:10 - pre 81 meseci

1.
U class Pristup dodaj

private $db;

function __construct() {
$this->db = new DB;
}

i onda bazu ne moras u svakoj funkciji pozivati, nego samo koristis

$this->db->funkcija();

2.Imena promjenjivih su ti predugacka
3.Nije ti bas najpravilinije funkcije nazivati npr. sqlGetLogedAdmins bolje ti je da koristis loged_admins(inace logged se pise :D)
4. Query ti je bolje da izgleda ovako npr. "INSERT INTO logedadmins (adminId, sessionId) VALUES ( {$adminId}, {$sessionId} )"
5. razvajaj znak '=' od promjenjivih($bla = $bl, a ne $bla=$bl)
...
Ima toga koliko god hoces, samo uci, uci i uci i sam ces sve to sto sam ja napisao sam vidjeti, vremenom :)
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
212.200.84.*



+1 Profil

icon Re: Misljenje o login skripti20.06.2013. u 22:46 - pre 81 meseci
Hvala Mladjox na savetima. ti si hteo da mi skrenesh paznju na citljivost koda i korishtenje fwa ali meni je trebalo samo da li nisam skroz omashio princip pa da ukapiram kasnije. inace mislim da nastavim ovako samo shto cu da probam da pishem bolji kod ali necu josh frejmvorkove da ucim sad pravim neki manji sajt pa mi se ne isplati zbog njega da ucim poshto vidim da mora dobro da se prouci probao sam vec da instaliram kohanu ali mi neshto neide.jedino ako postoji neki fw koji se jednostavnije koristi??
 
Odgovor na temu

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.dynamic.isp.telekom.rs.



+24 Profil

icon Re: Misljenje o login skripti21.06.2013. u 09:31 - pre 81 meseci
Svaki poziv u DB.php ti sadrzi connect(true) i odmah zatim connect(false), pretpostavljam da si tako hteo da oslobodis resurse sto pre, ali ti u stvari u jednom pozivu vise puta otvaras i zatvaras konekciju. Npr:

Code:

 function isValidUnamePass($username,$password) //Proverava da li uneti username i pass postoje u bazi
    {
        $db=new DB;
        $admins=$db->getRegAdmins(); //OTVORI ZATVORI 1
        while($adminRed=mysql_fetch_array($admins))
        {
            if($adminRed['username']==$username && $adminRed['password']==$password)
            {
                return true;
                break;
            }
            
        }        
    }
        
    function login($uName,$pass)
    {
        if($this->checkInput($uName) && $this->checkInput($pass))
        {

            if ($this->isValidUnamePass($uName,$pass))
            {                
                $_SESSION['adminId']=$uName;
                $_SESSION['sessionId']=session_id();
                $db=new DB();
                $db->addLoginAdmin($uName, $_SESSION['sessionId']); //OTVORI ZATVORI 2
            }
        }        
    }


samo u ovom jednom delu otvaras istu konekciju 2 puta. Ne moras je ni zatvarati, zatvorice se sama po izvrsenju skripte (ili je zatvori sam tek onda kada si siguran da ti vise ne treba). Onda, zasto uzimas sve admine pa ih provlacis kroz petlju kada mozes da uradis
Code:
 SELECT * FROM logedadmins where username = 'ime' and password = 'lozinka' 


Ali pre svega ovoga predji na PDO.
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Misljenje o login skripti21.06.2013. u 15:22 - pre 81 meseci
hvala madog na odgovoru.
da li kad se preko PDOa upisuje u bazu da li on ima neka odbrambene mere od sql injectiona??
i malo mi je teze da ukapiram taj PDO da li je i mysqli dobra opcija za rad za bazom?
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti21.06.2013. u 16:10 - pre 81 meseci
Citat:
Nedja995: hvala madog na odgovoru.
da li kad se preko PDOa upisuje u bazu da li on ima neka odbrambene mere od sql injectiona??
i malo mi je teze da ukapiram taj PDO da li je i mysqli dobra opcija za rad za bazom?


PDO ima zastitu za sql injection ako ga pravilno koristis, mysqli nije losa opcija ali je PDO 3 puta bolja :)
 
Odgovor na temu

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.dynamic.isp.telekom.rs.



+24 Profil

icon Re: Misljenje o login skripti21.06.2013. u 16:11 - pre 81 meseci
ima odbrambene mehanizme od SQL injection ako koristis "prepared statement". mysqli je bolja opcija od mysql, ali ja bih ti ipak preporucio PDO. Odluka je na tebi, mozda neko drugi ima drugacije misljenje, ali ovako bih ti ja preporucio.

EDIT: Mladjox je bio brzi ;)
 
Odgovor na temu

Gost




Profil

icon Re: Misljenje o login skripti21.06.2013. u 16:27 - pre 81 meseci
PDO moze da radi sa vishe baza podataka znaci da je komplikovaniji za upotrebu (ispravite me ako greshim)a mysqli je za jednu???
verujem da je PDO mocniji ali pokushavao sam vec neshto sa njim i ne ide mi a mysqli sam poceo sad da primenjujem zato shto je slican kao mysql
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Misljenje o login skripti21.06.2013. u 16:29 - pre 81 meseci
post gore je moj :D
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti21.06.2013. u 18:36 - pre 81 meseci
Citat:
Gost: PDO moze da radi sa vishe baza podataka znaci da je komplikovaniji za upotrebu (ispravite me ako greshim)a mysqli je za jednu???
verujem da je PDO mocniji ali pokushavao sam vec neshto sa njim i ne ide mi a mysqli sam poceo sad da primenjujem zato shto je slican kao mysql


http://net.tutsplus.com/tutori...-phps-pdo-for-database-access/
 
Odgovor na temu

Nedja995

Član broj: 309141
Poruke: 55
62.240.22.*



+1 Profil

icon Re: Misljenje o login skripti22.06.2013. u 17:21 - pre 81 meseci
Ipak sam uspeo neshto sa PDO i preradio sam funkciju koja mi proverava da li uneti username i password postoje u bazi
Code:
function isValidUnamePass($username,$password) //Proverava da li uneti username i pass postoje u bazi
    {
        $db=new DB;
        $admins=$db->getRegAdmins(); //OTVORI ZATVORI 1
        while($adminRed=mysql_fetch_array($admins))
        {
            if($adminRed['username']==$username && $adminRed['password']==$password)
            {
                return true;
                break;
            }
            
        }        
    }


i odradio sam kao shto je maddog_srb rekao
Code:
 SELECT * FROM logedadmins where username = 'ime' and password = 'lozinka' 


Code:
function isValidUnamePass($username,$password) //Proverava da li uneti username i pass postoje u bazi
    {
        $stmt = $this->db->prepare("SELECT username, password FROM admins WHERE username = :username AND password = :password");
        $stmt->execute(array(':username' => $username, ':password' => $password));
        $count = $stmt->rowCount();
        if ( $count != 1)
        {
            return false;
        }
        else
        {
            return true;
        }

    }

Da li mi je ovo dovoljno shto se provere unosa pre ubacivanja u bazu msm na tu prepare metodu ili je potrebno neko podeshavanje PDO objekta db ili mozda posebna provera PHP filterima ili funkcijom koja gleda da li se koriste znakovi ' " OR itd shto moze da se iskoristi za inject?

[Ovu poruku je menjao Nedja995 dana 22.06.2013. u 18:32 GMT+1]
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+2 Profil

icon Re: Misljenje o login skripti23.06.2013. u 11:08 - pre 81 meseci
Svaki korisnikov unos podatadaka moras obraditi prije pozivanja bilo kog query-a(provjeriti da li je npr. email pravilan itd).
http://php.net/manual/en/function.filter-input.php
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Misljenje o login skripti

[ Pregleda: 2476 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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