hallo ik ben voor mijn website bezig om een admin gedeelte te bouwen zodat ik makkelijk content kan toevoegen/verwijderen/wijzigen en heb niet altijd mijn laptop met mijn bestanden bij me natuurlijk :)

dus heb ik nu een zo veilig mogelijke login proberen te maken met de vele criteria en tips die hier gegeven wordt en ben tot een stukje php script gekomen en wil aan jullie vragen of dit goed is en zal werken.

hieronder dan het stukje code

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

include ('connect.php');

$gebruikersnaam = trim($_POST['name']);
$wachtwoord = trim($_POST['password']);
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1('password' .$salt);

if(empty($_POST[$gebruikersnaam])){

$noName = "vul uw naam in";
}

if(empty($_POST[$wachtwoord])){

$noPassword = "vul een wachtwoord in";
}

$gUser = ("SELECT name, password
FROM members
WHERE name='" .mysql_real_escape_string($_POST[$gebruikersnaam]). "'
");
if($gUser === false){

$errDB = "er ging iets fout in de database";
}

else {


if (sha1($_POST[$wachtwoord] .$salt)== $pass && ($_POST[$gebruikersnaam])== 'name' ){

header("location: http://www.reshadfarid.nl/admin/admin.php";);

exit;

}

else {

$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}


?>


	<form method="post" id="loginForm" action="">
		  <div>
				<label for="name">Naam:</label>
				<input id="name" name="name" type="text" />
				<?php if(isset($noName)){
						echo $noName;
				} ?>
		  </div>
		  	<div>
		  		<label for="password">Wachtwoord:</label>
		  		<input id="password" name="password" type="password" />
		  		<?php if(isset($noPassword)){
		  				echo $noPassword;
		  		}
		  		?>
		  	</div>

		  	<div><input type="submit" id="send" name="send" value="login"></div>
		  <?php if(isset($noMatch)){
		  				echo $noMatch;
		  		}
		  		if(isset($errDB)){
		  			echo $errDB;
		  		}
		  		?>
		  	</form>
	
Sorry, maar er klopt niet veel van.

- $pass = sha1('password' .$salt);
Dus het wachtwoord is 'password' en dat staat niet in een database.

- if(empty($_POST[$gebruikersnaam])){
$_POST?
Waarschijnlijk bedoel je: if(empty($gebruikersnaam)){
- if(empty($_POST[$wachtwoord])){
Idem.
- mysql_real_escape_string($_POST[$gebruikersnaam])
Idem.

- if($gUser === false){
Er is nog geen query uitgevoerd. $gUser is tekst.

- if (sha1($_POST[$wachtwoord] .$salt)== $pass && ($_POST[$gebruikersnaam])== 'name' ){
Idem $_POST?
En je inlognaam is dus 'name'.
Je hebt gelijk santhe ik zag even door alle bomen het bos niet meer denk ik ik ga het even aanpassen!
En ik zou je password gewoon in de query meenemen, ipv achteraf controleren:


$gUser = ("
SELECT 
	name, password 
FROM 
	members 
WHERE 
	name='" .mysql_real_escape_string(trim($_POST['name'])."',
AND
	password = '".mysql_real_escape_string($pass)."'
");
Je doet de empty check op de POST variabelen verkeerd om. Eerst doe je:
$gebruikersnaam = trim($_POST['name']);
en dan gebruik je een empty(). Als de variabele echter niet bestaat gaat je script op bovenstaande al onderuit. Altijd dus EERST controleren met isset(), dan pas gebruiken. En ik zou zoals te doen gebruikelijk ook geen empty gebruiken. Als er niets is ingevuld krijg je gewoon geen record uit de database dus wordt de gebruiker ook niet ingelogd.
even alles aangepast en heb het nu zo. maar nu vraag ik mij af als ik de password in de query al controleer hoe weet ik of de wachtwoord wat ik ingevoerd heb gelijk is aan het wachtwoord in de database aangezien het met salt & pepper gecodeerd is.
maakt dit wat uit?

voor de rest hieronder de nieuwe php code

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

include ('connect.php');

$gebruikersnaam = $_POST['name'];
$wachtwoord = $_POST['password'];
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1($wachtwoord .$salt);

if(!isset($gebruikersnaam)){

$noName = "vul uw naam in";
}

if(!isset($wachtwoord)){

$noPassword = "vul een wachtwoord in";
}

$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($gebruikersnaam). "'
AND
password = '" .mysql_real_escape_string($pass). "'
");

$controle = mysql_query($gUser);

if($controle === false){

$errDB = "er ging iets fout in de database";
}

else {


if (mysql_num_rows($controle) > 0){

header("location: http://www.reshadfarid.nl/admin/admin.php";);

exit;

}

else {

$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}


?>
Je doet nog steeds de isset op de verkeerde plaats.
Reshadd farid op 14/03/2012 16:33:02

<?php
$gebruikersnaam = $_POST['name'];
$wachtwoord = $_POST['password'];
?>


Sowieso vraag ik me af waarom je dit doet.
Regel 6 en 7 zijn overbodig. Verder kan iedereen die de juiste url kan raden gewoon het systeem binnenkomen, je zult de pagina's moeten beveiligen door gebruik te maken van sessie's.
hmm wat bedoel je precies? moet ik de isset gelijk na if ($_SERVER['REQUEST_METHOD'] == 'POST'){ zetten?

kan je misschien een voorbeeld geven?

[size=xsmall]Toevoeging op 14/03/2012 16:43:54:[/size]

@jens de sessie komt er inderdaad nog in het ging hier nog even om qua wachtwoord beveiliging en controle van invoer

@obelix ik weet dat het normaal gesproken beter in de query kan verwerken maar kom ik daarmee niet in de problemen als ik de wachtwoord eruit haal?
Eerst testen, dan gebruiken. Of eerst gebruiken, dan testen. Wat denk jij dat de juiste volgorde is?

Jij doet dit:
<?php
$gebruikersnaam = $_POST['name'];
if(!isset($gebruikersnaam)){
$noName = "vul uw naam in";
}
?>
Ik zeg dit:
<?php
if (isset( $_POST['name'])){
$gebruikersnaam = $_POST['name'];
} else {
$noName = "vul uw naam in";
}
?>
Wat is het verschil?

Reageren