Archief - PHP: Login/register probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

adrianhates

Legacy Member
Ok vraagje

Context :
Ik ben dus bezig met een loginscriptje te schrijven alsook het registreer scriptje hiervoor.

Mijn probleem is dus :
Als ik een nieuwe gebruiker registreer doet hij foute actions. De browser keert gewoon terug naar de register.php. Spijtig genoeg kan ik hiervoor de reden niet vinden..

Moest iemand de tijd hebben om hier eens naar te kijken zou ik dit ten zeerste op prijs stellen. Kwil alleen maar bijleren..

Grtz! ;)

Bijgevoegd de SQL code voor de database ( check bottom ) :


PHP:
<?php 
$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbpass = ''; 
 
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die                      ('Error connecting to mysql'); 
 
$dbname = 'basis'; 
mysql_select_db($dbname); 
?>

PHP:
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
	<meta name="language" content="nl-BE" />
	<link rel="stylesheet" type="text/css" href="style.css" />
	<title>CMS</title>
</head>

<body>
	<?php if($_SESSION['Login']) 
	{	
	?>
		<div id="login">
		<?php if(!$_SESSION['Admin']) 
		{ 
		?>
			Welcome <?php echo $_SESSION['name']; ?>.
			<ul>
				<li><a href="Login.php?action=Logout">Logout</a></li>
			</ul>
		<?php 
		} 
		else 
		{
		?>
			Welcome <?php echo $_SESSION['name']; ?>.
			<ul>
				<li><a href="admin.php"> Admin panel</a></li>
				<li><a href="Login.php?action=Logout">Logout</a></li>
			</ul>
		<?php 
		}
		?>
		</div>
	<?php
	} 
	else 
	{
	?>
	<div id="login">
		<h3>
			Login aub:
		</h3>
		<form method="post" action="login.php" name="banner">					
			<table>						
				<tr>							
					<td style="vertical-align: middle;">								
					Username:							
					</td>
					<td>								
					<input class="klasse"type="text" size="12" name="username" class="input" />							
					</td>
				</tr>
				<tr>
					<td style="vertical-align: middle;">								
					Password: 							
					</td>													
					<td>								
					<input class="klasse" type="password" size="12" name="password" class="input" />							
					</td>	
				</tr>
				<tr>
					<td>
					</td>
					<td>								
						<input type="submit" name="inloggen" value="Log in" class="inputsubmit" />							
					</td>						
				</tr>
				
				<tr>												
					<td colspan="2" align="right">								
						No account? <a href="register.php" class="logon">Register here!</a>													
					</td>						
				</tr>						
				<tr>							
					<td>&nbsp;</td>						
				</tr>
                 						
			</table>
		</form>
	</div>
	<?php
	}
	?>
</body>
</html>

PHP:
<?php

/* start de sessie */
session_start();

/* Connecteer naar de database */

include("includes/connectie.php");

/* Dit is om te controleren of de actie logout was , ZOJA voer het volgende uit */
if($_GET['action']=="Logout")
	{
		/* Ledig de session variabelen */
		unset($_SESSION['Login']);	
		unset($_SESSION['name']);
		unset($_SESSION['Admin']);
		unset($_SESSION['Email']);
		
		/* Zet de gebruiker op offline */
		mysql_query("UPDATE users SET onlin='0' WHERE ID='" . $_SESSION['ID'] . "'");
		
		/* Ledig de session ID */
		unset($_SESSION['ID']);
		
		/* Ga terug naar den index pagina */ 
		echo "<script>";
		echo "document.location = 'index.php'";
		echo "</script>";
}

/* Gebruik alleen maar kleine letters , geen kapitale */	
$username = strtolower(trim($_POST['username']));
$password = md5(strtolower($_POST['password']));

/* Selecteer de gebruiker uit de database door de waardes te vergelijken */
$query = mysql_query("SELECT * FROM users WHERE Naam='" . $username. "' AND Paswoord='" . $password ."' AND Actief=1");

while($row = mysql_fetch_array($query))
	{	
		/* Geef de session variabelen de nodig waardes */
		$_SESSION['Login'] = True;
    	$_SESSION['name'] = $username;
    	$_SESSION['ID'] = $row['ID'];
        $_SESSION['Email'] = $row['Email'];
		
		/* Als de user een admin is , geef deze dan admin rechten */
        if ($row['Admin'] == 1)
            {
                $_SESSION['Admin'] = 1;
            }
    }
	
	/* Update de status van de user naar ONLINE */
	mysql_query("UPDATE users SET onlin='1' WHERE ID='" . $_SESSION['ID'] . "'");
	echo mysql_error();
	
	/* Update de status van de user naar aanvang van de sessie! */
	mysql_query("UPDATE users SET Online='" . date(H) . ":" . date(i)  . ":" . date(s) . "' WHERE ID='" .$_SESSION['ID'] . "'");
	echo mysql_error();
	
	/* Ga terug naar den index pagina */ 	
	echo "<script>";
	echo "document.location = 'index.php'";
	echo "</script>";
	
?>

PHP:
<?php
mysql_connect("localhost","root","");
mysql_select_db("basis");

$query = mysql_query("SELECT * FROM basis.users WHERE onlin=''");

while($row = mysql_fetch_array($query))
	{
		if (substr($row['Online'],0,2) <= Date(H)-1 || substr($row['Online'],0,2) >= Date(H) + 1 )
			{
				mysql_query("UPDATE basis.users SET Onlin='0' WHERE ID='" .$row['ID'] . "'");
				
				
				echo "<script>";
				echo "document.location = 'login.php'";
				echo "</script>";
			}
	}
?>
PHP:
<?php
session_start();

if ($_SESSION['Login'])
	{
		/* Als er al iemand ingelogd is , ga dan meteen naar de index pagina */
		echo "<script>";
		echo "document.location = 'index.php'";
		echo "</script>";
		exit();
	}
	
/* Variabelen om de passwoorden en de emails te vergelijken */
$password1 = $_POST['password'];
$password2 =  $_POST['password2'];
$mail = $_POST['email1'];
$mail2 = $_POST['email2'];


/* Als de passworden overeenkomen : */
if ($password1==$password2)
    {
		/* Als de passwords gelijk zijn , hash dan het password met MD5 */
        $Paswoord = md5($password1);
    } 
else 
	{
		/* Dit is om terug te gaan naar de register pagina als de passworden niet overeen kwamen */
		$_SESSION['Fout'] = "Passwords don't match please try again";
		echo "<script>";
		echo "document.location = 'register.php'";
		echo "</script>";
		exit();	
		
    }

/* Als de emails overeenkomen : */
if ($mail==$mail2)
    {
		if (strpos($mail, "@"))
			{
				/* zet de email om naar alleen maar kleine letter */
				$email = strtolower(trim($mail));
			} 
		else 
			{
				/* Dit is om terug te gaan naar de register pagina als de emails het teken arobase niet bevatten */
				
				$_SESSION['Fout'] = "The E-mail adresses you submitted is invalid";
				echo "<script>";
				echo "document.location = 'register.php'";
				echo "</script>";
				exit();
			}
	} 
else 
	{
		/* Dit is om terug te gaan naar de register pagina als de emails niet overeen komen */
		
		$_SESSION['Fout'] = "The E-mail adresses you submitted don't match";
		echo "<script>";
		echo "document.location = 'register.php'";
		echo "</script>";
		exit();
    }
	
/* Spamcheck gebeurd hier door de optelling te vergelijken */
if($_POST['spam_check'] ==($_SESSION['rand1'] + $_SESSION['rand2']))
    {
		include("includes/connectie.php");
        $result = mysql_query("SELECT * FROM users WHERE Naam ='" . $_POST['username'] . "'");
        $row = mysql_num_rows($result);
    } 
else
	/* Als de spamcheck invalid was , wordt er  teruggekeerd naar de register pagina */
    {
		$_SESSION['Fout'] ="The number you entered was invalid";
		echo "<script>";
		echo "document.location = 'register.php'";
		echo "</script>";
		exit();
    }
		  
if($row >=1)
	{
		$_SESSION['Fout'] = "Username already exists";
		echo "<script>";
		echo "document.location = 'register.php'";
		echo "</script>";
		exit();
	} 
else 
	/* Als de spamcheck aanduidt dat dit geen spam is , wordt de nieuwe gebruiker in de database geplaatst */
	{
		/* Er wordt een sessie bijgehouden in de map sessions */
		$pad = "sessions/" . $_POST['username'] . ".txt";
		mysql_query("INSERT INTO users (Naam, Paswoord, Email, Online) VALUES ('$_POST[username]', '$Paswoord', '$email','$pad')");

		/* De member krijgt zijn eigen folder voor pictures */
		$path = "images/memberpics/" . $_POST['username'];       
		mkdir($path,0777);
		fopen($pad, 'w');
		
		$_SESSION['rand4'] = rand(1,10);
		$_SESSION['rand5'] = rand(1,10);
		
		$_SESSION['rand3'] = md5($_SESSION['rand4']) . md5(rand(1,10)) . md5($_SESSION['rand5'])  ;
		
		echo "<script>";
		echo "document.location = 'register.php?action=" . $_SESSION['rand3'] ."'";
		echo "</script>";
		
	    exit();
	}
?>

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
	<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
	<meta name="language" content="nl-BE" />
	<link rel="stylesheet" type="text/css" href="style.css" />
	<title>CMS</title>
</head>

<body>

<?php
if(strlen($_GET['action'])!= 0) 
	{
		if($_GET['action']== $_SESSION['rand3']) 
			{
				unset($_SESSION['rand3']);
				unset($_SESSION['rand4']);
				unset($_SESSION['rand5']);
			?>
				U bent met succes ingelogd<br/>
				U zal worden doorgewezen binnen 10 seconden . Of klik gewoon <a href='index.php'>hier</a>.
				<br />
		
				<script>
				var countdown = 10
				var targeturl="index.php"
				function redirect()
					{
						if(countdown != 1)
							{
								countdown -= 1
							}
						else
							{
								window.location = targeturl
								return
							}
						setTimeout("redirect()",1000)
					}
				redirect()
				</script>
		<?php
		}
	} 
else 
	{ 
	?>
		<?php 
		echo $_SESSION['Fout']; 
		$_SESSION['Fout'] = '' ;
		?>
		<form action="registreren.php" method="post">
			<table>
			<tr>
				<td colspan="2">
					<h3 class="news">
					Register please
					</h3>	
				</td>
			</tr>		
			<tr>
				<td>
					Username:
				</td>
				<td>
					<input type=text size=20 name="username" class="input">
				</td>		
			</tr>				
			<tr>					
				<td>				
					Email-adres: 			
				</td>				
				<td>					
					<input type=text size=20 name="email1" class="input">			
				</td>		
			</tr>			
			<tr>	
				<td>				
					Repeat email-adres: 			
				</td>			
				<td>			
					<input  type=text size=20 name="email2" class="input">				
				</td>			
			</tr>			
			<tr>			
				<td>						
					Password: 		
				</td>				
				<td>						
				<input type=password size=20 name="password" class="input">				
				</td>				
			</tr>				
			<tr>				
				<td>				
					Repeat password: 			
				</td>				
				<td>				
				<input  type=password size=20 name="password2" class="input">				
				</td>			
			</tr>            
			<tr>
			<td>
			<?php
				$_SESSION['rand1'] = rand(1,10) ;
				$_SESSION['rand2'] = rand(1,10) ;
			?>
				&nbsp;&nbsp;<?php echo $_SESSION['rand1'];?>  + <?php echo $_SESSION['rand2'];?> =
			</td>
			<td class="incom">
				<input type="text" name="spam_check" value="" size=5> ( to prevent spam )
			</td>
			</tr>
			<tr>		
				<td>				
				</td>			
				<td>				
				<input class="inputsubmit" type="submit" name="registreren" value="Register">
				</td>				
			</tr>
			<tr>
				<td class="underline"></td><td>&nbsp;</td>
			</tr>
			</table>
		</form>
	<?php 
	}
	?>
</body>
</html>

Code:
 CREATE TABLE `basis`.`users` (
`ID` INT( 255 ) NOT NULL AUTO_INCREMENT ,
`Naam` VARCHAR( 25 ) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL ,
`Paswoord` VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL ,
`Actief` INT( 1 ) NOT NULL DEFAULT '0',
`Email` VARCHAR( 30 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL ,
`Admin` INT( 1 ) NOT NULL DEFAULT '0',
`Online` TIME NOT NULL DEFAULT '00:00:00',
`onlin` INT( 1 ) NULL DEFAULT NULL ,
PRIMARY KEY ( `ID` )

$sql = 'CREATE TABLE `basis`.`users` (`ID` INT(255) NOT NULL AUTO_INCREMENT, `Naam` VARCHAR(25) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `Paswoord` VARCHAR(50) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, `Actief` INT(1) NOT NULL DEFAULT \'0\', `Email` VARCHAR(30) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL, `Admin` INT(1) NOT NULL DEFAULT \'0\', `Online` TIME NOT NULL DEFAULT \'00:00:00\', `onlin` INT(1) NULL DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE = MyISAM';

Cycloon

Legacy Member
killgore zei:
uw site is kwetsbaar voor SQL injections enzo.

Magic_quotes staat op de meeste webservers wel aan, dus lijkt me niet echt een probleem.

Cycloon

Legacy Member
Tyfius zei:

Weet ik, maar PHP 6 is er nog niet. En als magic_quotes aanstaat is nog eens mysql_real_escape_string() doen niet echt een goed idee.

Hij kan er natuurlijk wel extra op letten, maar het is tot nu toch nog niet echt een noodzaak en hij is ook maar wat aan het spelen met code. Zorgen voor later zou ik zeggen ;)

Tyfius

Legacy Member
Jah, maar je mag er gewoon niet van uit gaan dat dit aan staat. De meeste hosts die ik ken zetten dit al sinds versie 4 standaard uit.

Cycloon

Legacy Member
Tyfius zei:
Jah, maar je mag er gewoon niet van uit gaan dat dit aan staat. De meeste hosts die ik ken zetten dit al sinds versie 4 standaard uit.

Ik heb eerlijk gezegd nog niet veel hosts gezien die het standaard hebben uitstaan. Het is wel een punt, maar niet op dit moment imo.

killgore

Legacy Member
geef anders eens als tip: leer slecht programmeren.

En magic quotes staat heus niet op de meeste webservers aan. Daarnaast kan je ook perfect gewoon foute content meegeven ipv enkel injections. en rarara, magic_quotes beschermt niet tegen utf_8 omzeilingen van quotes :-).

Je kan in sommige gevallen (ik heb er hier niet op gelet) ook zonder ' aan injection doen, immers wanneer je bv. getal=$_GET["blablabla"] doet, goed opgelet? geen quotes nodig!

Dus, conclusie: zijn code is slecht & kwetsbaar.

Cycloon

Legacy Member
killgore zei:
geef anders eens als tip: leer slecht programmeren.

Je moet gewoon ergens beginnen hé :) Je bent toch zelf ook niet direct begonnen met lopen toen je net probeerde te stappen?

Laat hem eerst maar uit het probleem komen dat hij nu heeft en later zal die zelf wel meer info tegenkomen of zoeken over mysql injection.

killgore

Legacy Member
waarom zeggen 'wacht tot later?'. Hij is bezig, ik merk een fout op, des te beter voor hem dat hij het zo snel mogelijk weet toch ...?

dJeez

Legacy Member
Cyc1oon zei:
Magic_quotes staat op de meeste webservers wel aan, dus lijkt me niet echt een probleem.
Da's dus dom van die veronderstelling uit te gaan, zeker als je weet dat in PHP6 magic_quotes verdwijnt. En gatenkaas zet je ook best niet online - zeker niet als het gaat om upload scripts, want anders staat er binnen de kortste keren gegarandeerd een phishing site op je hosting...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan