<?php
if (!isset($_SESSION)) { session_start(); }

if (isset($_SESSION['login']) && $_SESSION['login'] === true && isset($_SESSION['userid']) && $_SESSION['userid'] != "") {
header('location: loggedin.php');
exit();
}

include "connect.php";
include "functions.php";

$error = "";

if (isset($_POST['login']) || isset($_POST['username']) || isset($_POST['password']) || isset($_POST['g-recaptcha-response'])) {

$username = $_POST['username'];
$password = $_POST['password'];
$captcha= $_POST['g-recaptcha-response'];
if (checkUsername($username) === false) {
$error = "Onjuiste inlogpoging";
}
if (checkPassword($password) === false) {
$error = "Onjuiste inlogpoging";
}
if(!$captcha){
$error = "Please check the the captcha form.";

}

$secure_username = bin2hex(htmlspecialchars($username));
$secure_password = bin2hex(htmlspecialchars($password));

$q_checklogin = mysqli_query($conn, "SELECT id FROM users WHERE username = UNHEX('$secure_username') AND password = UNHEX('$secure_password')");

if (mysqli_num_rows($q_checklogin) === 1) {
$r_checklogin = mysqli_fetch_assoc($q_checklogin);
$_SESSION['userid'] = $r_checklogin['id'];
$_SESSION['login'] = true;
header('location: loggedin.php');
} else {
$error = "Onjuiste inlogpoging";
}

}
?>

Ik heb deze code geschreven maar iedere keer als ik wil inloggen logt de website in zonder dat de captcha geverifieerd is, dit niet mij bedoeling. De gebruikersnaam en het wachtwoord moeten kloppen hierna moet de captcha geverifieerd worden en dan pas mag er ingelogd zijn. Hoe krijg ik het voor mekaar om dit te doen?
Je checked de captcha nergens.
En de query is niet beveiligd.
a) als je het inlogformulier toont dan schrijf je de captha naar de sessie.
<?php
session_start();
$_SESSION['captcha'] = $captcha;
?>

b) als het formulier verstuurd is dan vergelijk je de captcha uit de sessie met de captcha in de $_POST array.
<?php
session_start();
if(!isset($_SESSION['captcha']) || trim(strtolower($_SESSION['captcha'])) != trim(strtolower($_POST['captcha'])))
$error = 'Captcha is niet juist';
?>


Ik raad je sterk aan de wachtwoorden te versleutelen met bcrypt (bij example #2). Je moet hiervoor wel PHP versie 5.5 of hoger hebben draaien.
Waar zouden deze 2 voorbeelden dan in de code komen te staan. Ben een beginner met PHP net een maandje bezig & snap nog niet helemaal hoe & waar alles moet staan
session_start() zet je helemaal boven in je script.
voorbeeld a zet je boven de html van je form

<?php
session_start();

$capthca = 'AB123';

$_SESSION['captcha'] = $captcha;
?>
<form>
   Hier je formfields
</form>


het tweede voorbeeld zet je in de code die je boven toont
Jaa maar hoe ziet mijn code er dan uit waar moet ik dat deel van jou in mijn code vragen (dat is de vraag nu)
een werkend voorbeeldje dan maar

<?php
// een functie die een willekeurige reeks letters en cijfers maakt
function generateRandomString($length = 10) {
    $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

session_start();

$error = '';

// als het formulier verstuurd wordt dan is de request in de POST methode.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // validatie van de captcha
    if(!isset($_SESSION['captcha']) || trim(strtolower($_SESSION['captcha'])) != trim(strtolower($_POST['captcha']))) {
        $error = 'Captcha is niet juist';
    }
    
    // HIER KAN NOG MEER VALIDATIE PLAATSVINDEN
    
    
    // als de validatie geslaagd is sturen we de gebuiker door naar een andere pagina
    if($error == '') {
        header('Location: homepage.php');
        exit;
    }
}

// maak een nieuwe captcha code
$_SESSION['captcha'] = generateRandomString(5);

// PAS HIERONDER STARTEN WE MET DE OUTPUT. session_start() en header() zouden anders niet werken!

// DISCLAIMER: GEBRUIK GEEN SVG OF TEXT OM DE CAPTCHA WEER TE GEVEN MAAR GENEREER EEN AFBEELDING.
// HIER IS DE CAPTCHA WEL GEWOON TEKST MAAR DIT IS SLECHTS EEN KORT VOORBEELD!
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Captcha!</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <?php 
            if(strlen($error))
                echo '<p>' . $error . '</p>';
        ?>
        <svg height="30" width="200">
            <text x="0" y="15" fill="red"><?php echo $_SESSION['captcha']; ?></text>
        </svg>
        <form action method="post">
            <input type="text" name="captcha" placeholder="vul de captcha code in">
            <button>Test!</button>
        </form>
    </body>
</html>
Wat jij me nu geeft is een zelf gemaakte captcha maar ik wil die van google gebruiken zoals die in mijn code boven in het topic ????
<?php
if (!isset($_SESSION)) { session_start(); }

if (isset($_SESSION['login']) && $_SESSION['login'] === true && isset($_SESSION['userid']) && $_SESSION['userid'] != "") {
header('location: loggedin.php');
exit();
}

include "connect.php";
include "functions.php";

$error = "";

if (isset($_POST['login']) || isset($_POST['username']) || isset($_POST['password']) || isset($_POST['g-recaptcha-response'])) {

$username = $_POST['username'];
$password = $_POST['password'];
$captcha= $_POST['g-recaptcha-response'];
if (checkUsername($username) === false) {
$error = "Onjuiste inlogpoging";
}
if (checkPassword($password) === false) {
$error = "Onjuiste inlogpoging";
}
if(!$captcha){
$error = "Please check the the captcha form.";

}

$secure_username = bin2hex(htmlspecialchars($username));
$secure_password = bin2hex(htmlspecialchars($password));

$q_checklogin = mysqli_query($conn, "SELECT id FROM users WHERE username = UNHEX('$secure_username') AND password = UNHEX('$secure_password')");

if (mysqli_num_rows($q_checklogin) === 1) {
$r_checklogin = mysqli_fetch_assoc($q_checklogin);
$_SESSION['userid'] = $r_checklogin['id'];
$_SESSION['login'] = true;
header('location: loggedin.php');
} else {
$error = "Onjuiste inlogpoging";
}

}
?>

 <!DOCTYPE html>
<html lang="en">
  <head>
  <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css">
  <link rel="stylesheet" href="css/stylesheet.css" type="text/css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
	<script src='https://www.google.com/recaptcha/api.js'></script>
  <script src="js/java.js"></script>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Login</title>
  <style>
  .error {
	color: darkred;
	font-weight: bold;
  }
  </style>
  </head>
  <body>
    <nav class="navbar navbar-default">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="index.php">SBRM National Bank</a>
      </div>
      <div class="collapse navbar-collapse" id="myNavbar">
        <ul class="nav navbar-nav">
          <li><a href="index.php">Home</a></li>
          <li><a href="#">Particulier</a></li>
          <li><a href="#">Persoonlijk</a></li>
          <li><a href="#">Privé</a></li>
          <li><a href="#">Zakelijk</a></li>

        </ul>
        <ul class="nav navbar-nav navbar-right">
          <li><a href="register.php"><span class="glyphicon glyphicon-user"></span> Registeren</a></li>
          <li class="active"><a href="login.php"><span class="glyphicon glyphicon-log-in"></span>  Inloggen</a></li>
        </ul>
      </div>
    </div>
    </nav>
    <div class="container-fluid hero-slide">
      <div class="row">
    <div id="myCarousel" class="carousel slide " data-ride="carousel">



      <div class="carousel-inner" role="listbox">
        <div class="item active">
          <img src="images/login.jpg" alt="Ad">
    <div class="carousel-caption">
          <h3 class="caption">Inloggen</h3>

        </div>
      </div>
      </div>
    </div>
    </div>
  </div>

<div class="container padding-top-10">
  <div class="panel col-md-6">
    <div class="panel-heading "><h5>Inloggen</h5></div>
    <div class="panel-body">
      <form action="login.php" method="post">
<label for="username" class="control-label">Gebruikersnaam:</label>
        <div class="row ">
          <div class="col-md-12">
            <input type="text" class="form-control" id="username" placeholder="Gebruikersnaam" name="username" value="<?php if (isset($_POST['username'])) { echo $_POST['username']; } ?>" required/>
          </div>
        </div>
<label for="password" class="control-label">Wachtwoord:</label>
        <div class="row ">
          <div class="col-md-12">
            <input type="password" class="form-control" id="password" placeholder="Wachtwoord" name="password" value="<?php if (isset($_POST['password'])) { echo $_POST['password']; } ?>" required/>
          </div>
          <!-- Alleen nodig bij registratie, maar je kan hier wel een pincode als extra beveiliging van maken gezien het normaal om geld gaat
		  <div class="col-md-6">
            <input type="password" class="form-control" id="password" placeholder="Herhaal Wachtwoord" name="rpassword" required/>
          </div>
		  -->
				<div class="row">
					<div class="col-md-8 padding-top-10 ">
						<div class="g-recaptcha" data-sitekey="6LcCsBoTAAAAAK72uzyJSrgWwD8xuF6jFIfgFaHX"></div>
					</div>
				</div>
        </div>
        <div class="row">
          <div class="col-md-2 padding-top-10">
            <input type="submit" name="login" class="btn btn-succes" value="Login">
          </div>
        </div>
		<?php if ($error !== "") { ?>
		<div class="row ">
          <div class="col-md-12 error">
            <?php echo $error; ?>
          </div>
        </div>
		<?php } ?>
        <div class="row">
          <div class="col-md-12 padding-top-10">
            <p class="pleft">Door op <b>login</b> te klikken, gaat u akkoord met de <a class="algemeen" href="#" data-toggle="modal" data-target="#t_and_c_m">Algemene Voorwaarden</a> opgesteld door deze site.</p>
          </div>
        </div>
      </form>
    </div>
</div>
</div>


  <div class="modal fade" id="t_and_c_m" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
	<div class="modal-dialog modal-lg">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
				<h4 class="modal-title" id="myModalLabel">Algemene Voorwaarden</h4>
			</div>
			<div class="modal-body">
        <p>Deze algemene voorwaarden zijn tot stand gekomen in overleg
tussen de Nederlandse Vereniging van Banken en de Consumentenbond
in het kader van de Coördinatiegroep Zelfreguleringsoverleg
van de Sociaal-Economische Raad en treden in werking
per 1 november 2009. Over overige (product)voorwaarden die
van toepassing kunnen zijn heeft geen overleg plaatsgevonden.
De Consumentenbond behoudt zich het recht tot collectieve
actie voor met betrekking tot dergelijke voorwaarden.</p>
      </div>
			<div class="modal-footer">
				<button type="button" class="btn btn-primary" data-dismiss="modal">Ik ga akkoord</button>
			</div>
		</div>
	</div>
</div>

</div>

<footer>
  <div class="container">
    <div class="row">
      <div class="col-sm-3">
        <h6>Copyright &copy; 2016</h6>
        <ul class="list-unstyled">
          <li class="boss">Sander Bakker</li>
          <li class="unstyled">Bob Lansbergen</li>
          <li class="unstyled">Ronald van den Heuvel</li>
          <li class="unstyled">Max Donck</li>
        </ul>
      </div>
      <div class="col-sm-3">
        <h6>Over Ons</h6>
        <p id="pfont">Dit is een website ontworpen om een banksysteem te simuleren met PHP en mySQL</p>
      </div>

      <div class="col-sm-2">
        <h6>Navigatie</h6>
        <ul class="list-unstyled">
          <li class="unstyled"><a href="#">Home</a></li>
          <li class="unstyled"><a href="#">Particulier</a></li>
          <li class="unstyled"><a href="#">Persoonlijk</a></li>
          <li class="unstyled"><a href="#">Privé</a></li>
          <li class="unstyled"><a href="#">Zakelijk</a></li>
        </uL>
      </div>
      <div class="col-sm-2">
        <h6>Contact</h6>
        <ul class="list-unstyled">
          <li class="unstyled"><a href="#">Google +</a></li>
          <li class="unstyled"><a href="#">Facebook</a></li>
          <li class="unstyled"><a href="#">Twitter</a></li>
          <li class="unstyled"><a href="#">YouTube</a></li>
        </uL>
      </div>
    </div>
  </div>
</footer>
  </body>
  </head>
  </html> 


Dit is de volledige code die ik gebruik. Hierin is de google reCaptcha terug te vinden binnen een div onder de form class :)
zet het even tussen [ c o d e ] en [ / c o d e ] maar dan zonder al die spaties. Dan kunnen we het beter lezen.

Reageren