Archief - Problemen login systeem

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.

profound

Legacy Member
Ik ben een paar weken begonnen met php, en ik moet zeggen dat ik een leuke scripttingtaal vind!
Ik ben om me een beetje te oefenen een site aan het maken meteen login gedeelte, alleen; ik ben nu al een hele tijd aan het zoeken en sukkelen, maar het lukt echt niet, en ik weet niet hoe het komt...

Homepage: Een standaard login formpje
HTML:
<form name="login" method="post" id="login" action="welkom.php" >

        <table cellspacing="10">
        <tr>
          <td>Login </td>
          <td>
            <input type="text" name="myUsername"/>
          </td>
        </tr>

        <tr>
          <td>Wachtwoord </td>
          <td>
            <input type="password" name="myPassword" />
          </td>
        </tr>

        <tr>
          <td>
            <input type="submit" value="Login" name="Submit"/>
          </td>
          <td>
            <a href=""> Registreren?</a>
          </td>
        </tr>

      </table>
  
    </form>


Welkom pagina; de pagina waar je heen gaat als je ingelogt bent.

PHP:
  ob_start();  
  $host="localhost";
  $username="Jadran";
  $password="***";
  $dbname="Login";
  $tblname="users";
  
  $fout="FOUT: openen database mislukt, gelieve opnieuw te proberen";
  
  mysql_connect("$host" , "$username" , "$password" ) or die ("Couldn't connect to database");
  mysql_select_db("$dbname") or die ("Couldn't find database");  
  
  if(!isset($_POST['Submit'])) 
 {
  print_r($_POST); // kijken welke variabelen er gestockeerd zijn
  $myusername =$_POST['myUsername'];
  $mypassword =$_POST['myPassword'];
  
  
  $query = "select * from $tblname where loginName = '$myusername' and loginPass = '$mypassword'";
  $result = mysql_query($query);
  
  $count = mysql_num_rows($result);
  
  if($count > 0)
  {
    session_register("myUsername");
    session_register("myPassword");
    header("location: portfolio.php");
  }
  
  else
  {
    echo("Error");
  }
 }

Ingelogde pagina: de pagina waar je alleen maar zou moeten kunnen bekijken indien ingelogt, tevens een gewone controle om te kijken of alles werkt.

PHP:
<?php

session_start();

if(isset($_SESSION["myUsername"]))
{
    print("Ingelogt");
}

else
{
    print("Error");
}

?>

<html>
<head>
	<title></title>
</head>

<body>


</body>
</html>

Het probleem is dat het niet blijkt te werken, en ik zou niet weten hoe het komt.
Met de sql database is alles normaal gezien in orde. Het is waarschijnlijk een dom foutje, maar ik ben radeloos :(

GivenToFly

Legacy Member
Je gebruikt session_register(), dat is een functie die niet meer bestaat in de laatste versies van PHP en daarom niet meer gebruikt wordt. Gebruik dus om sessie-variabelen aan te maken gewoon $_SESSION['foo'] = 'bar';. Zorg dan ook wel dat je session_start() ook op deze pagina uitvoert.

Je gebruikt if(!isset($_POST['Submit'])), d.w.z. als de variabele $_POST['Submit'] niet bestaat wordt het stuk tussen de accolades uitgevoerd. Dat lijkt me het omgekeerde van wat je wil, ik zou denken dat je de code wil uitvoeren als de variabele wel bestaat.

Bovendien zijn namen van variabelen hoofdlettergevoelig, myUsername (bij session_register) is niet hetzelfde als myusername (de naam van je variabele).

Nog enkele andere opmerkingen:
- Knip je database-gegevens weg uit je post.

- Gebruik ipv if(isset($_POST['Submit'])) beter
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST")

- Hoe variabelen buiten quotes, die zijn enkel nodig om strings te verwerken:
PHP:
 $query = 'select * from $tblname where loginName = "'.$myusername.'" and loginPass = "'.$mypassword.'"';

- Security: maak minstens gebruik van een hashfunctie om paswoorden te versleutelen en slaag geen paswoorden op in een session-var of cookie. Bescherm je tegen SQL-injection door mysql_real_escape_string() te gebruiken.

- IngelogD

welkom.php kan er dan bijvoorbeeld als volgt uitzien:
PHP:
<?php
session_start();

$host = "localhost";
$username = "****";
$password = "****";
$dbname = "Login";
$tblname = "users";

$dbConnect = mysql_connect($host,$username,$password);
if(!$dbConnect)
{
	echo 'Error: could not connect to the MySQL-server.';
}
else
{
	$dbSelect = mysql_select_db($dbname);
	if(!$dbSelect)
	{
		echo 'Error: could not select the database.';
	}
	else
	{
		if($_SERVER['REQUEST_METHOD'] == "POST")
		{
			$qCheckUser = 'SELECT * FROM '.$tblname.' WHERE loginName = "'.mysql_real_escape_string($_POST['myUsername']).'" AND loginPass = "'.mysql_real_escape_string($_POST['myPassword']).'"';
			// + gebruik md5 of sha1 om je wachtwoorden te hashen, ev. met toegevoegde salt
			$result = mysql_query($qCheckUser);
			if(!$result)
			{
				echo 'Error: the query was invalid.';
			}
			else
			{
				$_SESSION['myUsername'] = $_POST['myUsername'];
				header("Location: portfolio.php");
			}
		}
		else
		{
			'No form sent.';
		}
	}
}
?>

profound

Legacy Member
In ieder geval al ontzettend bedankt voor je reply!

1) Ik bedoelde idd if(isset($_POST['Submit'])), zonder de ! dus, had ik volledig overgekeken! :)

2) Mijn database gegevens voer ik normaal in via een include(), maar omdat ik een goed overzicht wou over al mijn gegevens, heb ik dit eventjes achterwege gelaten.

3) Idem met het encrypteren van de wachtwoorden! Dit wou ik allemaal doen, nadat het inloggen naar behoren werkte!

4) Ingelogd, ik zal er op proberen letten :D

5) Nu werkt het! Eindelijk!

Nogmaals bedankt dude! :bow:

adrianhates

Legacy Member
1 opmerking:
WAAROM gebruikt ge output buffer? :) Da is toch gewoon copy paste van ergens :p

- Security: maak minstens gebruik van een hashfunctie om paswoorden te versleutelen en slaag geen paswoorden op in een session-var of cookie

Slaag geen passworden op die niet gesalted + gehashed zijn met sha1 op in een cookie/sessie. Zulke hash moogt ge imo in een cookie / sessie opslagen. Daar zie ik geen graten in ( plz correct me if wrong )

GivenToFly

Legacy Member
adrianhates zei:
1 opmerking:
WAAROM gebruikt ge output buffer? :) Da is toch gewoon copy paste van ergens :p



Slaag geen passworden op die niet gesalted + gehashed zijn met sha1 op in een cookie/sessie. Zulke hash moogt ge imo in een cookie / sessie opslagen. Daar zie ik geen graten in ( plz correct me if wrong )

Het vormt dan inderdaad geen direct groot probleem maar als iemand er op een of andere manier toch in slaagt een hash te kraken is het veel minder erg dat een random generated string wordt gevonden dan een echt paswoord van een gebruiker. De kans op kraken is dan wel richting infinitesimaal klein bij salted sha1, aangezien meestal gewoon md5 gebruikt wordt, lijkt het me niet slecht het als algemene regel te posteren. Het lijkt me bovendien ook nooit nodig in een systeem nodig om paswoorden langdurig te onthouden.
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