Putin PHP [pentru cei experimentati]

Discutii despre tot ce nu se incadreaza in celelalte categorii.

Moderators: Moderatori ajutatori, Moderatori

Locked
User avatar
Marius
Fost moderator
Fost moderator
Posts: 8294
Joined: 11 Nov 2007, 12:19
Detinator Steam: Da
CS Status: being awesome since 1992
SteamID: kNNwOw
Reputatie: eXtream Mod
Fost administrator
Fost dezvoltator al listei de seriozitate eXtreamCS
Fost Membru Club eXtreamCS
Location: Timisoara
Has thanked: 577 times
Been thanked: 680 times

24 Dec 2012, 12:28

Am la facultate de facut un proiect in care sa fac ceva gen delicious.com. Am ales sa fac in PHP, pentru ca era cel mai accesibil dintre toate limbajele de pe foaie.

Chestia e ca m-am blocat la verificarea logarii userului. Am construit o pagina de inregistrare care functioneaza cum trebuie, o pagina de login care functioneaza cum trebuie, dar la verificarea pe index daca userul este logat sau nu, imi este afisat din nou acel formular...m-am blocat si nu vad ce am gresit.

index.php arata asa:

Code: Select all

<?php
session_start();
include('config.php');
?>
<html>
<head>
<title>Online bookmark organizing - FRONTPAGE</title>
</head>
<div align="center">
<br /><br />
<?php 
if($_SESSION['logged']!==1){
echo '
<strong>Please enter your credentials:</strong> <br /><br /><br />
<form action="login.php" method="POST">
Username: <input type="text" name="user" /> <br />
Password: <input type="password" name="pwd" /><br />
<input type="submit" value="LOGIN" />
</form>
<button onclick="window.location.href=\'register.php\'">REGISTER</button>
<br />
';} else {
echo '<div align="center">Esti deja logat, buna usere! :)</div>';
}
?>
<br /><br /><br /><br />&copy; Marius Popa - 2012 . Made for West <strong>University of Timsioara</strong></div>
</html>
reg.php arata asa (mai am si register.php in care e doar form-ul cu postarea datelor):

Code: Select all

<?php

// requiring the config file

require_once('config.php');

// getting data with $_POST via website's form
$user=$_POST['user'];
$name=$_POST['name'];
$email=$_POST['email'];
$pass=$_POST['pwd'];
$pwd= md5($pass);


// username verification
$verify = mysql_query("SELECT * FROM users WHERE username = '". $user ."' ");
$row = mysql_fetch_array($verify);
$rows_number = mysql_num_rows($verify);
		if($rows_number==0){
			mysql_query("INSERT INTO users (username, password, realname, email)
			VALUES ('$user', '$pwd', '$name','$email')");
			
			/* mail($email,
			"'.$name.', your registration is now complete!",
			"'.$name.', thank you for registering :-)! \n\n Below these line are your login credentials: \n\n\n User: '.$user.' \n Password: '.$pwd.' \n"); */

			echo '<div align="center">You\'ve been registered into the system. Press <a href="login.php">here</a> to go to the LOGIN page or press <a href="index.php">here</a> to get back to the homepage</div>';

		} else {
			echo '<center><font color="red"><b>Sorry, this name already exists in the database! Please <a href="register.php">try again</a>!</b></font></center>';
		}		
?>
iar login.php arata asa:

Code: Select all

<?php
require_once('config.php');
ob_start();
if($_SESSION['logged']!==1){

$user = $_POST['user'];
$pwd = $_POST['pwd'];

$q = mysql_query("SELECT * FROM users WHERE username = '".$user."' AND password = md5('".$pwd."')");
$rowz = mysql_fetch_array($q);
$n = mysql_num_rows($q);

if($n == 1){
	$_SESSION['logged']=1;
	echo 'logat, mars pe <a href="index.php">homepage</a>';
} else {
	echo '<center><font color="red"><b>Please check your credentials again!</b></font></center>';
}
}
ob_end_flush();

?>
------> un mindset sanatos pentru eXtream <------
PS: NU sunt intermediar
RoyalServer 2
User avatar
Raduk
Membru, skill +1
Membru, skill +1
Posts: 246
Joined: 29 Nov 2008, 08:26
Detinator Steam: Da
Location: Brasov
Has thanked: 12 times
Been thanked: 31 times

24 Dec 2012, 13:12

In loc sa verifici

Code: Select all

if($_SESSION['logged']!==1){
...
}
foloseste

Code: Select all

if(isset($_SESSION['logged'])===false){
...
}
Si cand utilizatorul vrea sa se deconecteze dai unset la SESIUNE.

Era buna si idea ta, dar ai scris gresit: Prima data tu ai dat sesiunii valuarea int 1 iar apoi verificai daca valuarea booleana este 1 (adica true). Trebuia facut ceva de gen if($_SESSION['logged']!=1) ca sa verifici daca valuarea int nu este 1. Sau sa initializezi sesiunea ca true: $_SESSION['logged']=true

Oricum am cateva obiectii in ceea ce priveste codul tau, in primul rand toate informatiile care la preiei de la utilizator valideaza-le (mysql_real_escape_string(), htmlentities() etc).
Sa criptezi parola prin md5 nu prea e recomandat nu mai stau acum sa explic de ce caci sunt destule topicuri pe net.

Info:

Code: Select all

phpsec.org/projects/guide/
User avatar
Marius
Fost moderator
Fost moderator
Posts: 8294
Joined: 11 Nov 2007, 12:19
Detinator Steam: Da
CS Status: being awesome since 1992
SteamID: kNNwOw
Reputatie: eXtream Mod
Fost administrator
Fost dezvoltator al listei de seriozitate eXtreamCS
Fost Membru Club eXtreamCS
Location: Timisoara
Has thanked: 577 times
Been thanked: 680 times

24 Dec 2012, 13:55

Stiu despre stripslashes, escaped string si htmlentities, insa timpul e scurt si probabil ca o sa fac o securizare minimala la final daca mai am timp. Doresc doar sa indeplinesc toate cerintele proiectului, iar securitatea nu e unul din ele.

Am ales md5 ca e cel mai simplu mod de a cripta o parola in php.


Am incercat si isset si tot nu vrea pe index sa imi spuna ca sunt deja logat.
------> un mindset sanatos pentru eXtream <------
PS: NU sunt intermediar
User avatar
IsTI37
Fost administrator
Fost administrator
Posts: 10987
Joined: 10 Apr 2007, 15:02
Detinator Steam: Da
Reputatie: Fost administrator
Fost SysAdmin
Fost Fondator GTA5 (CVL)
Location: Cluj-Napoca
Has thanked: 28 times
Been thanked: 776 times

24 Dec 2012, 15:40

Nu ai voie sa folosesti un framework ?
Vad o gramada de greseli.

Code: Select all

<button onclick="window.location.href=\'register.php\'">REGISTER</button>
<div align="center">
<br /><br />
echo 'ditamai textul in care pot fi greseli de escape'
Astea sunt greseli 'uriase' care spun ca habar n-ai ceea ce faci.
verifica ce primesti la print $_SESSION['logged']; , cred ca e de la ob flush problema...

Nu e o idee stralucita sa folosesti direct php direct cand sunt o gramada de frameworkuri frumoase si usor de folosit.
User avatar
Marius
Fost moderator
Fost moderator
Posts: 8294
Joined: 11 Nov 2007, 12:19
Detinator Steam: Da
CS Status: being awesome since 1992
SteamID: kNNwOw
Reputatie: eXtream Mod
Fost administrator
Fost dezvoltator al listei de seriozitate eXtreamCS
Fost Membru Club eXtreamCS
Location: Timisoara
Has thanked: 577 times
Been thanked: 680 times

24 Dec 2012, 16:46

IsTI37 wrote:Nu ai voie sa folosesti un framework ?
Vad o gramada de greseli.

Code: Select all

<button onclick="window.location.href=\'register.php\'">REGISTER</button>
<div align="center">
<br /><br />
echo 'ditamai textul in care pot fi greseli de escape'
Astea sunt greseli 'uriase' care spun ca habar n-ai ceea ce faci.
verifica ce primesti la print $_SESSION['logged']; , cred ca e de la ob flush problema...

Nu e o idee stralucita sa folosesti direct php direct cand sunt o gramada de frameworkuri frumoase si usor de folosit.
Nu prea, trebuie sa-l fac eu de la 0.

Am spus mai sus de ce am ales php-ul. O sa scriu in documentatie oricum plusuri si minusuri, problema mea momentana e sa-l fac functional.

La acel print $_SESSION['logged'], primesc valoarea 1, iar pe homepage nu-mi arata nimic
------> un mindset sanatos pentru eXtream <------
PS: NU sunt intermediar
vim
Programator eXtream
Programator eXtream
Posts: 853
Joined: 29 May 2009, 19:13
Detinator Steam: Da
CS Status: Trag cu praştia !
Reputatie: Fost programator web eXtreamCS
Administrator tehnic
Sysadmin
Location: Bucureşti
Has thanked: 2 times
Been thanked: 342 times

24 Dec 2012, 20:46

@Marius: Porneste sesiunea in `login.php` (din prima linie) si nu mai activa un buffer pentru output daca nu folosesti acel output undeva. (aka sterge `ob_start` si `ob_end_flush`) si sterge tag-ul `?>` de la sfarsitul fisierelor
I'm not antisocial, I'm just not user friendly.
⎯ retired
User avatar
Marius
Fost moderator
Fost moderator
Posts: 8294
Joined: 11 Nov 2007, 12:19
Detinator Steam: Da
CS Status: being awesome since 1992
SteamID: kNNwOw
Reputatie: eXtream Mod
Fost administrator
Fost dezvoltator al listei de seriozitate eXtreamCS
Fost Membru Club eXtreamCS
Location: Timisoara
Has thanked: 577 times
Been thanked: 680 times

24 Dec 2012, 21:15

M-a ajutat vim, multumesc :-).
------> un mindset sanatos pentru eXtream <------
PS: NU sunt intermediar
Locked

Return to “Discutii generale”

  • Information