Πρόβλημα με SESSION

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
tattooiv
Δημοσιεύσεις: 104
Εγγραφή: 19 Δεκ 2009 01:00

Πρόβλημα με SESSION

Δημοσίευση από tattooiv » 26 Φεβ 2013 22:32

Καλησπέρα παιδιά, εχω μπερδευτει και δεν μπορώ να σκεφτω πλεον καλα... :P εχω ενα αρχειο με μια φορμα στην οποια βαζω το email και το password, επειτα πηγαινω στο p1.php και απο εκει στο p2.php . Απο το p2.php οταν πηγαινω πισω στο p1.php δεν μου κραταει τα session. Μπαινει στην πρώτη if και μου λεει οτι τα text ειναι αδεια και μου πεταει το πρωτο σφαλμα οτι ειναι κενα. Απο οτι εχω καταλαβει το προβλημα ειναι στην σειρα στην οποια γραφω τον κωδικα. Οι έλεχγοι δεν γινονται με την σωστη σειρα μαλλον.... ευχαριστω για την βοηθεια. Παρακατω ειναι ο κωδικας απο τα 2 αρχεια.

p1.php

Κώδικας: Επιλογή όλων

<?php session_start&#40;&#41;;

?>

<html>
	<head>
		<title>p</title>
	</head>
	<body>
	</body>
</html>	

<?php

$found=false;

	if &#40; isset &#40;$_POST&#91;'email'&#93;&#41; && isset &#40;$_POST&#91;'password'&#93;&#41; &#41;
&#123;
$em=$_POST&#91;'email'&#93;;
$pa=$_POST&#91;'password'&#93;;
&#125;
else
&#123;
$em = $_SESSION&#91;'em'&#93;;
$pa = $_SESSION&#91;'pa'&#93;;
&#125;





																	// check if the two text boxes are empty
if &#40;&#40;empty&#40;$_POST&#91;'email'&#93;&#41;&#41; || &#40;empty&#40;$_POST&#91;'password'&#93;&#41;&#41;&#41;
	&#123;
		echo "<br><br><br><br>";											// message for empty text boxes
		echo "<table border='0' align='center' bgcolor='#EEEEEE'>";
		echo "<tr><td>Adeia text.</td></tr>";							
		echo "<tr><td><a href='../index.php'>here</a></td></tr>";
		echo "</table>";
	&#125;
else
	&#123;
	

	

	$con=mysql_connect&#40;"localhost","root"," "&#41;;
		if&#40;!$con&#41;
			die&#40;"Could not connect&#58;".mysql_error&#40;&#41;&#41;;
			
	mysql_select_db&#40;"mmmm",$con&#41;;				// connection with the database
			
			
	$query1="SELECT * from pppp where EMAIL='".$_POST&#91;"email"&#93;."'";			// search in the table pppp if there is the email and password that user enter
			
	$result1=mysql_query&#40;$query1,$con&#41;;
	$row=mysql_fetch_array&#40;$result1&#41;;
			
	//$found=false;
			
		while&#40; &#40;$row&#91;'EMAIL'&#93;==$_POST&#91;"email"&#93;&#41; && &#40;$row&#91;'PASSWORD'&#93;==$_POST&#91;"password"&#93;&#41; &#41;			// if record exists with email and password the variable $found=1							
			&#123;
				$row=mysql_fetch_array&#40;$result1&#41;;
				$found=true;

			&#125;
				
		if&#40;$found==false&#41;											// first case, email or password does not exist
			&#123;		
				echo "<br><br><br><br>";										// message for incorrect email or password	
				echo "<table border='0' align='center' bgcolor='#EEEEEE'>";

				echo "<tr><td>Please try again.</td></tr>";
				echo "<tr><td><a href='../index.php'>here</a></td></tr>";
				echo "</table>";				
			&#125;
				
		if&#40;$found==true&#41;											// second case, email and password exist
			&#123;
			
				


			
				$result1=mysql_query&#40;$query1,$con&#41;;
				$row=mysql_fetch_array&#40;$result1&#41;;
				
				$_SESSION&#91;'found'&#93;=1;
				$_SESSION&#91;'em'&#93; = $row&#91;'EMAIL'&#93;;
				$_SESSION&#91;'pa'&#93; = $row&#91;'PASSWORD'&#93;;
				
				echo "<table border='0'>";
				echo "<tr><td width='50%' bgcolor='#EEEEEE'>Hi user &#40;".$row&#91;'FIRSTNAME'&#93;."&#41;.</td>";	
				echo "<tr><td width='50%' align='center'><a href='p2.php'>επόμενο</a></td>";
				echo "</table>";
			&#125;			
				
	mysql_close&#40;$con&#41;;												// we close the connection with the database 

	&#125;




p2.php

Κώδικας: Επιλογή όλων


<?php session_start&#40;&#41;;

?>
<html>
<head>
<title>aaa</title>
</head>
<body>
<?php
$logged = false;
if &#40;isset&#40;$_SESSION&#91;'found'&#93;&#41;&#41;
&#123;
if &#40;$_SESSION&#91;'found'&#93; == 1&#41;
&#123;
$logged = true;
&#125;
&#125;

if &#40;$logged&#41;
&#123;

?>
<a href="p1.php">επιστροφη στην p1</a>


<?php

&#125;
else
&#123;
?>

<h1>Restricted Access</h1>

<?php
&#125;
?>
</body>
</html>


Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Πρόβλημα με SESSION

Δημοσίευση από Banavas » 27 Φεβ 2013 07:40

Στο πρώτο if δεν πρέπει να ψάχνεις αν ειναι κενά τα $_post[] αλλά τα $em και $pa.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
tattooiv
Δημοσιεύσεις: 104
Εγγραφή: 19 Δεκ 2009 01:00

Πρόβλημα με SESSION

Δημοσίευση από tattooiv » 27 Φεβ 2013 20:46

Εχω καταλαβει οτι δεν κανω σωστα τους ελεγχους απλα μετα απο τοση ωρα PHP ημουν λιγακι μπερδεμενος. Αλλαξα τον κώδικα λιγο και τωρα τρεχει κανονικα. :P
If ( isset ($_POST['email']) && isset ($_POST['password']) )
{
Οριζω νεα session
if empty()
if found=false;
if found==true;
}
else
{
παιρνω τα παλια session σε μεταβλητες
}

και απλα εβαλα μια ακομα session

Κώδικας: Επιλογή όλων

$_SESSION&#91;'fi'&#93; = $row&#91;'FIRSTNAME'&#93;;
μεσα στην if found==true; για να μπορω να την χρησιμοποιήσω με την echo μεσα στο τελευταιο else στο οποιο εμφανιζεται το ιδιο μηνυμα με τις echo με αυτο που εμφανιζετε και με τις echo στο found==true .


Αν και στην αρχη ειχα σκεφτει και λειτουργησε οταν εβαλα να κανει παλι συνδεση σε βαση και ερωτημα SELECT, αλλα ειδα οτι αργει περισσοτερο η σελιδα να ανοιξει (φυσιολογικο) και δευτερον δεν ηταν σωστο προγραμματιστικα... :)

Παραθετω τον κώδικα για τυχον ιδια προβλήματα που θα αντιμετωπίσει καποιος....

Κώδικας: Επιλογή όλων

<?php session_start&#40;&#41;;

?>

<html>
   <head>
      <title>p</title>
   </head>
   <body>
   </body>
</html>   

<?php

$found=false;

   if &#40; isset &#40;$_POST&#91;'email'&#93;&#41; && isset &#40;$_POST&#91;'password'&#93;&#41; &#41;
&#123;
$em=$_POST&#91;'email'&#93;;
$pa=$_POST&#91;'password'&#93;;


                                                   // check if the two text boxes are empty
if &#40;&#40;empty&#40;$_POST&#91;'email'&#93;&#41;&#41; || &#40;empty&#40;$_POST&#91;'password'&#93;&#41;&#41;&#41;
   &#123;
      echo "<br><br><br><br>";                                 // message for empty text boxes
      echo "<table border='0' align='center' bgcolor='#EEEEEE'>";
      echo "<tr><td>Adeia text.</td></tr>";                     
      echo "<tr><td><a href='../index.php'>here</a></td></tr>";
      echo "</table>";
   &#125;
else
   &#123;
   

   

   $con=mysql_connect&#40;"localhost","root"," "&#41;;
      if&#40;!$con&#41;
         die&#40;"Could not connect&#58;".mysql_error&#40;&#41;&#41;;
         
   mysql_select_db&#40;"mmmm",$con&#41;;            // connection with the database
         
         
   $query1="SELECT * from pppp where EMAIL='".$_POST&#91;"email"&#93;."'";         // search in the table pppp if there is the email and password that user enter
         
   $result1=mysql_query&#40;$query1,$con&#41;;
   $row=mysql_fetch_array&#40;$result1&#41;;
         
   //$found=false;
         
      while&#40; &#40;$row&#91;'EMAIL'&#93;==$_POST&#91;"email"&#93;&#41; && &#40;$row&#91;'PASSWORD'&#93;==$_POST&#91;"password"&#93;&#41; &#41;         // if record exists with email and password the variable $found=1                     
         &#123;
            $row=mysql_fetch_array&#40;$result1&#41;;
            $found=true;

         &#125;
            
      if&#40;$found==false&#41;                                 // first case, email or password does not exist
         &#123;      
            echo "<br><br><br><br>";                              // message for incorrect email or password   
            echo "<table border='0' align='center' bgcolor='#EEEEEE'>";

            echo "<tr><td>Please try again.</td></tr>";
            echo "<tr><td><a href='../index.php'>here</a></td></tr>";
            echo "</table>";            
         &#125;
            
      if&#40;$found==true&#41;                                 // second case, email and password exist
         &#123;
         
            


         
            $result1=mysql_query&#40;$query1,$con&#41;;
            $row=mysql_fetch_array&#40;$result1&#41;;
            
            $_SESSION&#91;'found'&#93;=1;
            $_SESSION&#91;'em'&#93; = $row&#91;'EMAIL'&#93;;
            $_SESSION&#91;'pa'&#93; = $row&#91;'PASSWORD'&#93;;
            $_SESSION&#91;'fi'&#93; = $row&#91;'FIRSTNAME'&#93;;
            
            echo "<table border='0'>";
            echo "<tr><td width='50%' bgcolor='#EEEEEE'>Hi user &#40;".$row&#91;'FIRSTNAME'&#93;."&#41;.</td>";   
            echo "<tr><td width='50%' align='center'><a href='p2.php'>επόμενο</a></td>";
            echo "</table>";
         &#125;         
            
   mysql_close&#40;$con&#41;;                                    // we close the connection with the database

   &#125; 


&#125;
else
&#123;
$em = $_SESSION&#91;'em'&#93;;
$pa = $_SESSION&#91;'pa'&#93;;
$fi = $_SESSION&#91;'fi'&#93;;


				echo "<table border='0' width='100%' align='center' cellspacing='0'>";
				echo "<tr><td width='50%' bgcolor='#EEEEEE'>Hi user &#40;$fi&#41;.</td>";
				echo "<td width='50%' bgcolor='#EEEEEE' align='right'>logout</td></tr>";
				echo "<tr><td colspan='2'>&nbsp;</td></tr>";		
				echo "<tr><td width='50%' align='center'><a href='registration.php'>επόμενο</a></td>";
				echo "<td width='50%' align='center'>2</td></tr>";
				echo "</table>";
&#125;






?>
:hammer: :kaloe: :kaloe: :kaloe:

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Πρόβλημα με SESSION

Δημοσίευση από Banavas » 01 Μαρ 2013 07:35

Ο Κωδικας παρουσιάζει σοβαρά προβλήματα ασφάλειας. Δεν ξέρω φυσικά που πρόκειται να χρησιμοποιηθεί, αλλά για ένα haker είναι θέμα δευτερολέπτων να τον παραβιάσει.

Σε αυτή τη σειρά κωδικα περνάς την $_POST["email"] χωρίς έλεγχο σε sql query.
$query1="SELECT * from pppp where EMAIL='".$_POST["email"]."'";

Αν για παράδειγμα ο χρήστης δώσει email = user@user.gr;drop table USERS;
ή δώσει email = user@user.gr OR 0=0;

Αρχικά κάνε έλεγχο στις μεταβλητές που λαμβάνεις από τον χρήστη. Αλλά θέλει πολλά ακόμη για να κάνεις τον κώδικα ασφαλή.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
tattooiv
Δημοσιεύσεις: 104
Εγγραφή: 19 Δεκ 2009 01:00

Πρόβλημα με SESSION

Δημοσίευση από tattooiv » 02 Μαρ 2013 22:02

Banavas έγραψε:Ο Κωδικας παρουσιάζει σοβαρά προβλήματα ασφάλειας. Δεν ξέρω φυσικά που πρόκειται να χρησιμοποιηθεί, αλλά για ένα haker είναι θέμα δευτερολέπτων να τον παραβιάσει.

Σε αυτή τη σειρά κωδικα περνάς την $_POST["email"] χωρίς έλεγχο σε sql query.
$query1="SELECT * from pppp where EMAIL='".$_POST["email"]."'";

Αν για παράδειγμα ο χρήστης δώσει email = user@user.gr;drop table USERS;
ή δώσει email = user@user.gr OR 0=0;

Αρχικά κάνε έλεγχο στις μεταβλητές που λαμβάνεις από τον χρήστη. Αλλά θέλει πολλά ακόμη για να κάνεις τον κώδικα ασφαλή.
Ναι εχεις δικιο, δεν εχω αρχισει τους ελεγχους για τα δεδομενα που παιρνω απο τον χρηστη. Αυτο θα το εκανα πιο μετα αλλα αφου το ανεφερες τωρα θα ηθελε να σε ρωτησω αν μπορουσες να μου δωσεις καποιο παραδειγμα επειδη δεν το πολυκαταλαβα. Δηλαδη αν το email του χρηστη δεν ειναι με την κλασικη μορφη (name@example.com) ε? κατι τετοιο?? εχεις καποια παραδειγματα να μου στειλεις ή καποιο link για να διαβασω περισσοτερα για τετοιου ιδους θεματα ασφαλειας μιας σελιδας και πως να την κανω πιο ασφαλης?? σε ευχαριστω για τον χρονο σου!!! :D

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Πρόβλημα με SESSION

Δημοσίευση από Banavas » 03 Μαρ 2013 13:23

Αρχικά να σου πω οτι έχει σημασία τι θα προστατεύσει ο κώδικας user authentication. Δεν είναι το ίδιο να προστατεύεις μια σελίδα διαχείρισης με μία πρόσβαση σε τραπεζικές υπηρεσίες.
Παραδείγματα σου έχω ήδη δώσει:

Κώδικας: Επιλογή όλων

$query1="SELECT * from pppp where EMAIL='".$_POST&#91;"email"&#93;."'";
Αυτό με email = user@user.gr;drop table USERS; γίνεται&#58;
$query1="SELECT * from pppp where EMAIL='user@user.gr&#91;b&#93;;&#91;/b&#93;drop table USERS;'";
το σύμβολο &#91;;&#93; θα χωρήσει την παραπάνω γραμμή στις παρακάτω εντολές&#58;
$query1="SELECT * from pppp where EMAIL='user@user.gr;
drop table USERS;
'";
Η πρώτη εντολή προφανώς θα αποτύχει αλλά η δεύτερη μάντεψε τι θα κάνει.
άλλο παράδειγμα:

Κώδικας: Επιλογή όλων

$query1="SELECT * from pppp where EMAIL='".$_POST&#91;"email"&#93;."'";
Αυτό με email = user@user.gr' OR '0=0  γίνεται&#58;
$query1="SELECT * from pppp where EMAIL='user@user.gr' OR '0=0'";

Όπως καταλαβαίνεις το παραπάνω "email" θα δώσει αποτέλεσμα όλες τις εγγραφές της βάσης οπότε επειδή εδώ 
      while&#40; &#40;$row&#91;'EMAIL'&#93;==$_POST&#91;"email"&#93;&#41; && &#40;$row&#91;'PASSWORD'&#93;==$_POST&#91;"password"&#93;&#41; &#41;         // if record exists with email and password the variable $found=1                      
         &#123; 
            $row=mysql_fetch_array&#40;$result1&#41;; 
            $found=true; 

         &#125; 
δεν κάνεις ούτε το πιο απλό να μετρήσεις τα αποτελέσματα που δίνει το query o χρήστης &#40;hacker&#41; θα αποκτήσει πρόσβαση χωρίς password ουτε καν username.
Το κεφάλαιο ασφάλεια είναι τεράστιο και δεν μπορεί να εξηγηθεί σε ένα απλό μήνυμα, ούτε υπάρχει ένας απλός τρόπος που τον εφαρμόζουμε και καθαρίσαμε. Όμως ο έλεγχος του τι στέλνει ο χρήστης με απόρριψη των μη συμβατών δεδομένων είναι ένα τεράστιο πρώτο βήμα που διορθώνει πολλά προβλήματα και αποτρέπει μια μεγάλη μερίδα hacker ή επίδοξων hacker.

Ξεκίνα με γοογκλάρισμα για inpout validation και sql ijection και το ένα φέρνει το άλλο θα βρείς περισσότερα για διάβασμα. (δυστυχώς θα χρειαστεί αρκετό διάβασμα...)
Happy coding....
Μάρκος
http://lasernet.gr

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης