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

Problem oko logina...

[es] :: PHP :: Problem oko logina...

[ Pregleda: 2765 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_CaRtMan_

Član broj: 126731
Poruke: 305
89.146.185.*



+1 Profil

icon Problem oko logina...24.01.2008. u 14:47 - pre 168 meseci
Ovako:

Imam logiraj_me.php fajl i tu je samo forma i šalje na login.php . Provjerio sam, kada upišem u logiraj_me.php username i passwordu bude vamo u login.php uradio echo username i password u login.php .

login.php:


Code:
<?php
session_start();
include("config.php");

$username = addslashes($_POST["username"]);
$password = addslashes($_POST["password"]);

$a = mysql_query("SELECT * FROM korisnici") or die();
while($c=mysql_fetch_array($a)){

$id = $c["id"];
$user = $c["username"];
$pass = $c["password"];

}

if($username==$user AND $password==$pass){

        
        $session_id = session_id();
        $_SESSION["user_id"] = $id;
        setcookie("checksid",$session_id,time()+60*60*24*30);

        header("Location: index.php"); 
    
} else {
    
echo "nije";

}


?> 


Prije me je slalo na index.php , ali kako sam dodao još jednog usera neće..

I sad ja znam kako ću dobijati podatke o useru: SELECT * FROM korisnici WHERE id='$id', ali ne znam kako da dođem do $id , šta je pogrešno u ovom login.php

?
 
Odgovor na temu

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

Član broj: 120044
Poruke: 686
*.cable-3.sattrakt.net.

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


+2 Profil

icon Re: Problem oko logina...24.01.2008. u 15:05 - pre 168 meseci
ne valja ti pristup. ovde:
while($c=mysql_fetch_array($a)){

$id = $c["id"];
$user = $c["username"];
$pass = $c["password"];

}
u $user i $pass ce ti upisivati samo poslednjeg korisnika iz tabele.

promeni upit:

SELECT * FROM korisnici WHERE username = '$username' AND password = '$password'

tako ces dobijati samo tog jednog korisnika koji je odredjen sa tim usernameom i tom sifrom.
 
Odgovor na temu

_CaRtMan_

Član broj: 126731
Poruke: 305
89.146.189.*



+1 Profil

icon Re: Problem oko logina...24.01.2008. u 15:11 - pre 168 meseci
Promijenio sam query. Sada me šalje na index stranicu. Kako ću sada na naslovnoj doći do usernamea tj do ID-a. Na početku sam stavio session_start(); ne kontam.. kako da dobijem id.. znam da cu otic WHERE id='$id' ali ne znam to '$id', stavio sam tamo $_SESSION["user_id"] = $id; ali kada upisem echo $id nista.. (kad upisem u index.php) a u logiraj.php se nalazi to $_SESSION... Hvala.
 
Odgovor na temu

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

Član broj: 120044
Poruke: 686
*.cable-3.sattrakt.net.

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


+2 Profil

icon Re: Problem oko logina...24.01.2008. u 15:16 - pre 168 meseci
zju... morao sam dva puta da procitam...

oces na index.php da dobijes $id koji je upisan u SESSION? peace of cake:

na index.php prva linija:

session_start();

posle gde ti treba:

$user_id = $_SESSION['user_id'];

pod uslovom da si u login.php skriptu upisao u $_SESSION['user_id']

zop :)

dodatak: i meni je trebalo vremena da skontam kako rade sesije. dok ne skontas, zna biti zbunjujuce. uglavnom, ako na jednoj strani, prvoj, recimo login.php pokrenes sesiju sa session_start() pa posle, recimo redirekcijom odes na index.php, ako ponovo kazes session_start() ne pokrece novu sesiju, nego nastavlja onu sesiju koju si poceo na login.php. tako ono sto si upisao u login.php u $_SESSION ti je dostupno na index.php isto u $_SESSION. nastavljanje sesija sa session_start() (najcesce) vazi sve dok ne ugasis browser (ili sam u programu unistis sesiju).

dodatak dodatku: vidi ovde za vise o sesijama: http://www.php.net/manual/en/ref.session.php
 
Odgovor na temu

_CaRtMan_

Član broj: 126731
Poruke: 305
89.146.189.*



+1 Profil

icon Re: Problem oko logina...24.01.2008. u 15:21 - pre 168 meseci
E super! Buljim dva sata u kod, a ne mogu da skontam sta je greska, samo sad mi se javlja nesto sto se do sad nikad nije javilo:


Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Hvala ti puno..

Edit: Dva put imao $_SESSION u kodu.. riješeno
 
Odgovor na temu

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

Član broj: 120044
Poruke: 686
*.cable-3.sattrakt.net.

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


+2 Profil

icon Re: Problem oko logina...24.01.2008. u 15:28 - pre 168 meseci
daj kazi sta je bilo tacno, jos nisam video takvo upozorenje :o cackam po localhostu, al nikako da dobijem takav vorning :)
 
Odgovor na temu

_CaRtMan_

Član broj: 126731
Poruke: 305
*.PPPoE-3479.sa.bih.net.ba.



+1 Profil

icon Re: Problem oko logina...24.01.2008. u 16:07 - pre 168 meseci
Hehe, pa bilo ono $_SESSION dva puta u kodu, konkretno:

$user_id = $_SESSION['user_id'];

I dole negdje:

$_SESSION['user_id'] = $id;

 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Problem oko logina...26.01.2008. u 08:43 - pre 168 meseci
Citat:

promeni upit:

SELECT * FROM korisnici WHERE username = '$username' AND password = '$password'

tako ces dobijati samo tog jednog korisnika koji je odredjen sa tim usernameom i tom sifrom.



Jedno pitanje, sto se tice ovog Query-ja ... da li je bolje raditi:

SELECT * FROM korisnici WHERE username = '$username'

pa onda proveravati uneti password sa onim koji si izvukao iz baze, ili:

SELECT * FROM korisnici WHERE username = '$username' AND password = '$password'

i onda samo proveriti da li je broj vracenih linija razlicit od nule?



 
Odgovor na temu

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

Član broj: 120044
Poruke: 686
*.cable-3.sattrakt.net.

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


+2 Profil

icon Re: Problem oko logina...26.01.2008. u 09:04 - pre 168 meseci
SELECT * FROM korisnici WHERE username = '$username' AND password = '$password' je bolje. odma uzimas tacno taj red, nemas jos jednu proveru. i proveravas na jedan red, ne na vise od nule.
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Problem oko logina...26.01.2008. u 09:15 - pre 168 meseci
Istina da je to onda jedna provera manje, ali kako znati da li je korisnik uneo neispravan password ili nepostojeci username?
Odnosno kako informisati korisnika tacno zasto je login odbijen?
 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
*.ptt.yu.



+256 Profil

icon Re: Problem oko logina...26.01.2008. u 10:40 - pre 168 meseci
Ja ipak vise volim

SELECT password FROM korisnici WHERE username = '$username'

jer onda izvalcim tacno jedan podatak koji posle proverim. Zasto ljudi vole da izvuku sve (*) ako im nije neophodno, nije mi jasno, samo se puni memorija i opterecuje baza da vraca vise podataka.
Na ovaj nacin mozes i da mu kazes sta nije dobro (mada je iz sigurnosnih razloga bolje da mu kazes da ili jedno ili drugo nije dobro, jer moze na osnovu ispravnog username-a da pogadja password), tako sto ako nemas redova - onda nije dobar username, nema toga u bazi, a ako ima a ne slazu se passwordi- onda nije dobar password. Prosta logika.


Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Problem oko logina...26.01.2008. u 11:05 - pre 168 meseci
Hvala na informacijama - kao sto sam i predpostavio, i jedan i drugi metod je zastupljen medju grupom :)
 
Odgovor na temu

Tesla90
Sinisa Vukovic
Subotica

Član broj: 152735
Poruke: 38
*.eunet.yu.



Profil

icon Re: Problem oko logina...02.02.2008. u 21:18 - pre 168 meseci
Da ne bi zapocinjao novu temu,ja takodje imam jedan problem oko logina moja skripta glasi ovako:

<form action="login.php" method="post" name="frm">
<table cellspacing="4" cellpadding="4" style="border-bottom-width: thin; border-left-width: thin; border-right-width: thin; border-top-width: thin; border-style: dotted; border-color: red;">
<tr>
<td>username</td>
<td><input type="text" name="formlogin" class="cssborder"></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="formpass" class="cssborder"></td>
</tr>
</table>
<br> <input type="submit" value="login" class="cssborder">
</form>

<?php
if ($formpass == $pass && $formlogin == $username) {
session_register("loggedin");
$loggedin = "1";
//javascript-a za redirect to admin page.
?>
<script language="javascript">

location.replace("admin");

</script>

<h4><a href='admin'>you are now logged in, continue to the admin section</a></h4>
<?php
}
?>

Meni je jako sumljiv ovaj deo
if ($formpass == $pass && $formlogin == $username)
{
session_register("loggedin");
$loggedin = "1";

Inace pravim sebi Content manager pa iz vise skripta pravim sebi najbolju...

Znali neko sta je problem?



Watching your every move!!!
 
Odgovor na temu

holodoc1701

Član broj: 45446
Poruke: 48
*.eunet.yu.



Profil

icon Re: Problem oko logina...02.02.2008. u 22:20 - pre 168 meseci
Samo dve usputne napomene.

Kao prvo nadam se da je poznato da su direktni upiti tipa
Code:
SELECT password FROM korisnici WHERE username = '$username'

visoko podložni SQL injekciji i da je pre bilo kakvog izvršavanja dotičnog upita potrebno iskoristiti primera radi mysql_real_escape_string funkciju nad svim vrednostima koje dolaze direktno iz forme. Naravno pre toga je potrebno proveriti da li je uključen magic_quotes sistem i pre toga očistiti prosleđene vrednosti od escape-ovanih karaktera. Krajnji odbrambeni mehanizam je addslashes(). Sve navedeno otpada u slučaju korišćenja skladištenih procedura (stored procedures) koje mogu da se koriste u verziji 5 MySQL-a.

Druga stvar. Lično kod provere legitimnosti unetih podataka korisnika u login formi koristim metod
Code:
SELECT username FROM korisnici WHERE username = '$username' AND password='$password'

iz jednostavnog razloga što je iz sigurnosnih razloga preporučljivo u svim situacijama kada postoji više kriterijuma za ocenu ispravnosti nekog podatka iskoristiti što je moguće više dostupnih uslovljavanja. Primera radi u upitu
Code:
SELECT password FROM korisnici WHERE username = '$username'

potencijalnom napadaču je ostavljeno dosta mesta za manevrisanje jer upit bez ikakvih pitanja vraća lozinku za svako uspešno pogođeno korisničko ime.

Zaštita sa proverom korisničkog imena i lozinke je utoliko sigurnija ako se koriste skladištene procedure.

Usput... Nikada ne treba obelodanjivati korisniku šta tačno nije u redu kod podataka koji su korišćeni u login formi. U tim slučajevima treba biti maksimalno nekooperativan i obavestiti korisnika da je logovanje neuspešno ili zbog korisničkog imena i/ili zbog lozinke ili čak samo da je login neuspešan :)

@Tesla
U svom kodu imaš dosta konceptualnih grešaka.
Kao prvo ako si imao nameru da proveru ispravnosti podataka izvršiš u istom dokumentu gde ti se nalazi forma (stranica sa formom poziva samu sebe) onda si trebao redirekciju da izvršiš direktno iz PHP-a a ne putem Javascripta. To znači da bi nakon slanje forme odmah na početku fajla trebao da imaš deo koji proverava ispravnost forme i koji će putem funkcije header() da preusmeri tok izvršavanja na stranicu koja bi sadržala poruku o uspešnom logovanju. Ako bi kojim slučajem podaci bili neispravni onda bi taj deo sa redirekcijom jednostavno bio preskočen a ti bi mogao lepo u formi da naznačiš delove koji nisu ispravni.

Sledeća stavka je da se tvoj kod oslanja na činjenicu da je na serveru na kome se izvršava fajl register_globals uključen tj. da su dozvoljene globalne promenjljive. Šanse da je to slučaj sa nekim novijim serverom su otprilike ravne nuli :) Umesto globalnih promenjljivih treba da koristiš superpromenjljive $_POST, $_GET, $_SESSION, $_COOKIE... Razlog za ovo je potencijalni rizik po sigurnost aplikacije.

Usput... session_register() je zastarela funckija koja se više skoro i ne koristi. Umesto nje preporučuje se direktno deklarisanje promenjljive putem $_SESSION-a i inicijalizacija na neku početnu vrednost.

Generalna koncepcija tvog koda bi trebala da izgleda ovako:
Code:
<?php 
if(isset($_POST['formpass']) && isset($_POST['formlogin'])) 
     if(proveraKorisnika($_POST['formpass'], $_POST['formlogin'])){
          $_SESSION['logged_in'] = true;
          header("Location: fajl_sa_porukom_o_uspesnom_logovanju.php");
     } else
          $_SESSION['logged_in'] = false;
}
?>

<!-- Ovde ide forma ciji action atribut ukazuje na ovu stranicu (stranicu gde se nalazi forma) -->

Ovo je samo generalna koncepcija.

I za kraj... Izraz
Code:
if ($formpass == $pass && $formlogin == $username)

je ispravan jer operacija komparacije == ima prednost nad operacijom logičko ILI & ali je uvek dobra paksa delove odvajati dodatnim zagradama čak i kada to nije potrebno.
Evo primera radi jedne kompletne liste operatora koji se koriste u PHP-u sa njihovim prioritetom.
http://www.php.net/operators

[Ovu poruku je menjao holodoc1701 dana 02.02.2008. u 23:36 GMT+1]

[Ovu poruku je menjao holodoc1701 dana 02.02.2008. u 23:37 GMT+1]

[Ovu poruku je menjao holodoc1701 dana 02.02.2008. u 23:40 GMT+1]

[Ovu poruku je menjao holodoc1701 dana 02.02.2008. u 23:41 GMT+1]
 
Odgovor na temu

Tesla90
Sinisa Vukovic
Subotica

Član broj: 152735
Poruke: 38
*.eunet.yu.



Profil

icon Re: Problem oko logina...02.02.2008. u 23:13 - pre 168 meseci
@holodoc1701 hvala

Neznam bas najbolje php,naucio sam pomocu primera("naucio")mysql znam odlicno ali mi php bas neide u glavu ono znam osnovno ali opet.usvakom slucaju hvala,skontacu nesto sta dalje da radim...
Watching your every move!!!
 
Odgovor na temu

[es] :: PHP :: Problem oko logina...

[ Pregleda: 2765 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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