Login systeem

Status
Niet open voor verdere reacties.

tim687

Terugkerende gebruiker
Lid geworden
25 apr 2010
Berichten
1.774
Beste leden,

Ik heb zelf een login systeem gemaakt.

Je moet een gebruikersnaam en wachtwoord intypen (logisch) en dan op login klikken.

Er wordt dan een sessie gestart.

Wat alleen het rare is, is dat als ik dan in die sessie op de href klik gaat de link van index.php naar bijvoorbeeld index.php#blog.
Het gekke is alleen dat er dan niks op mijn scherm komt te staan.

Als ik niet heb in gelogt, dan laat hij keurig de pagina zien.

Ik weet niet of het eraan ligt dat hij als ik ben ingelogd geen pagina zie, maar als ik dan naar een volgende pagina (zonder #blog) erachter ga, waar ook een sessie wordt gestart.
Dan bevat de sessie geen informatie en is leeg.


Kan iemand mij een tutorial geven waarin staat hoe ik veilig met sessies in php moet werken?

Ik kan helaas niet te veel code posten, dit kan de beveiliging van de site verzwakken.

Bedankt,

Tim
 
Hmm,

Hier is de code van het beveiligen van de site:

PHP:
admin.php:

<?php
session_start();

// Original PHP code by Chirp Internet: www.chirp.com.au
  // Please acknowledge use of this code by including this header.

  function better_crypt($input, $rounds = 10)
  {
    $crypt_options = array(
      'cost' => $rounds
    );
    return password_hash($input, PASSWORD_BCRYPT, $crypt_options);
  }

if(isset($_SESSION['logged_in'])){
					//display index
				}else{
					// display login	
				
				if(isset($_POST['username'], $_POST['password'])){
					$username = $_POST['username'];
					$password = better_crypt($_POST['password'], 10);
					
					if(empty($username) or empty($password)){
						$error = 'All field are required!';
					
				    }else{
						$query = $pdo->prepare("SELECT * FROM users WHERE user_name = ?");
						$query->bindValue(1, $username);
												
						$query->execute();
						$user = $query->fetch();
						
						
						if(password_verify($_POST['password'],$user['user_password'])){
							$_SESSION['user'] = $user['user_password'];
							$_SESSION['password'] = $_POST['password'];
						}else{
							$error = 'Please enter correct username and password' . 'password: ' . $password;

						}
						
							
					}
				}
}
  

?>

blog-post.php:


De query wordt goed uitgevoerd, maar ik weet niet of het checken van het wachtwoord nu ook lukt aangezien er niks in de sessie staat waarschijnlijk.


<?php

session_start();

if(isset($_GET['id'])){
                    // display the blogpost
                
                    $id = $_GET['id'];
                    $data = $blogpost->fetch_data($id);
                    
                    $comments = $comment->fetch_comment($id);

                }else{
                    header('Location: ../index.php');
                    exit();
                }

if(isset($_SESSION['logged_in'])){
					if(isset($_SESSION['username'], $_SESSION['password'])){
					$username = $_POST['username'];
					$password = better_crypt($_POST['password'], 10);
					
					if(empty($username) or empty($password)){
						$error = 'All field are required!';
					
				    }else{
						$query = $pdo->prepare("SELECT * FROM users WHERE user_name = ?");
						$query->bindValue(1, $username);
												
						$query->execute();
						$user = $query->fetch();
						
						
						if(password_verify($_SESSION['password'],$_SESSION['user_password'])){
							if(isset($_GET['id'], $_POST['blog_post_author'], $_POST['blog_post_title'], $_POST['blog_post_small_content'], $_POST['blog_post_content'], $_POST['blog_post_lead'])){
					 
								 global $pdo;
					
								 $query = $pdo->prepare("UPDATE blog_posts SET blog_post_author = ?, blog_post_title = ?, blog_post_small_content = ?, blog_post_content = ?, blog_post_lead = ? WHERE blog_post_id = ?");
								 $query->bindValue(1, $_POST['blog_post_author']);
								 $query->bindValue(2, $_POST['blog_post_title']);
								 $query->bindValue(3, $_POST['blog_post_small_content']);
								 $query->bindValue(4, $_POST['blog_post_content']);
								 $query->bindValue(5, $_POST['blog_post_lead']);
								 $query->bindValue(6, $_GET['id']);
								 
								 $result = $query->execute();
							}
						}else{
							$error = 'Please enter correct username and password' . 'password: ' . $password;

						}
						
							
					}
				}
				}else{
					// display login	
				
				if(isset($_SESSION['username'], $_SESSION['password'])){
					$username = $_SESSION['username'];
					$password = better_crypt($_SESSION['password'], 10);
					
					if(empty($username) or empty($password)){
						$error = 'All field are required!';
					
				    }else{
						$query = $pdo->prepare("SELECT * FROM users WHERE user_name = ?");
						$query->bindValue(1, $username);
												
						$query->execute();
						$user = $query->fetch();
						
						
						if(password_verify($_SESSION['password'],$_SESSION['user_password'])){
							if(isset($_GET['id'], $_POST['blog_post_author'], $_POST['blog_post_title'], $_POST['blog_post_small_content'], $_POST['blog_post_content'], $_POST['blog_post_lead'])){
					 
								 global $pdo;
					
								 $query = $pdo->prepare("UPDATE blog_posts SET blog_post_author = ?, blog_post_title = ?, blog_post_small_content = ?, blog_post_content = ?, blog_post_lead = ? WHERE blog_post_id = ?");
								 $query->bindValue(1, $_POST['blog_post_author']);
								 $query->bindValue(2, $_POST['blog_post_title']);
								 $query->bindValue(3, $_POST['blog_post_small_content']);
								 $query->bindValue(4, $_POST['blog_post_content']);
								 $query->bindValue(5, $_POST['blog_post_lead']);
								 $query->bindValue(6, $_GET['id']);
								 
								 $result = $query->execute();
							}
						}else{
							$error = 'Please enter correct username and password' . 'password: ' . $password;

						}
					}
							
					}
				}

Wat mij wel opvalt, is dat als ik inlog en ik heb het network tab in Chrome open staan, zie ik mijn wachtwoord en gebruikersnaam terug. Dit is niet erg veilig denk ik :P:P

Over de fout dat er niks wordt weergegeven; Ik heb de code in Chrome bekeken, en het staat er wel. Het is puur ontzichtbaar. Ik krijg ook geen php error's of iets dergelijks.
 
Gebruik een challange response systeem, als je niet wilt dat deze waarde clientside te sniffen is
 
Ik ben nu een heel eind, en alles werkt ongeveer.

Wat er denk ik nu fout gaat, is dat de SHA_256 in javascript anders wordt gegenereerd als in php met de hash("sha256", text); functie

Ik gebruik een javascript library om de sha256 te genereren.

Hoe kan ik zorgen dat deze 2 hetzelfde genereren?
 
Laat eens zien hoe je dat doet?
 
Nevermind, de response van de server was niet goed.

De sha256 generator wel.

Bedankt iedereen!!
Alles werkt goed nu!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan