Hallo allemaal,

ik probeer een pagina te maken waarin contactgegevens uit een database worden gehaald en op deze pagina worden getoond. Niet zo heel lastig leek mij? Nu kom ik toch tegen een foutje aan. Weet misschien één van jullie zo op het eerste gezicht wat er fout aan is?

<script>
<?php
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";

mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");

$sql = "SELECT naam FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<table>
<tr>
<td>Naam:</td>
<td><?php echo $result ?></td>
</tr>
<tr>
</script>
Zeer vaag allemaal.

Dit is lek => Zie sql-injection.
<?php
$query= "SELECT * from users WHERE id=" .$_GET["id"];
?>

Hier kan de hele layout mee worden vernaggeld.

<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">


Ik zie nergens een session starten en ook niet dat je $_SESSION["username"] vult.

Hiermee kijk je of een willekeurig emailadres in je database zit.
Heeft niks met de ingelogde persoon te maken.
<?php
$query = "SELECT * FROM users WHERE email='$email';";
?>
Alvast bedankt voor de info. Hier de volledige bestanden

Dit is volledige file(beveiligd.php). Dit krijgt men na het inloggen.

<?php session_start(); ?>
<html>
<head>
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<title>Beveiligde pagina</title>
</head>

<body>
<div id="container" style="width:960px;height:500px;">
<div id="menu" style="background-color:#888888;width:960px;text-align:center;">
<!-- <a href="index.html">Home</a>
&#8195 &#8195
<a href="verkooppunten/verkooppunten.html">Verkooppunten</a>
&#8195 &#8195
<a href="contact/contact.html">Contact</a>
&#8195 &#8195 -->
<a href="logout1.php">Uitloggen</a>
</div>

<div id="content">

<?php
if (!isset($_SESSION["username"])){
$tekst = "<h2>U bent nog niet aangemeld.</h2>
U kunt <a href=\"login1.php\">hier inloggen</a> of<br>
U kunt zich <a href=\"registreer.php\">hier registreren</a>";
echo($tekst);
}else{?>
<h2>Welkom op deze beveiligde pagina</h2>
U bent aangemeld als : <?php echo($_SESSION["username"]);?> <br>
Uw wachtwoord is : <?php echo($_SESSION["wachtwoord"]);?> <br>
<?php
}
?>
</div>
</div>
</body>
</html>



Dan is het de bedoeling dat ze hun gegevens kunnen opvragen/wijzigen
dat is dan deze file (opvragen)

<?php
$host="localhost";
$username="root";
$password = "usbw";

$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query= "SELECT * from users WHERE id=" .$_GET["id"];

<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">
// ---- einde initialisatie

$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>

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

<body>
<!--kolomkoppen voor de tabel in plain HTML schrijven -->
<table border="0" width="70%" align="center">
<tr>
<td colspan="10"><h2 align="center">Werknemers</h2></td>
</tr>
<tr>
<th>id</th>
<th>email</th>
<th>wachtwoord</th>
<th>admin</th>
<th>naam</th>
<th>adres</th>
<th>plaats</th>
<th>postcode</th>
<th>land</th>
<th>nieuwsbrief</th>
</tr>
<!-- Vanaf hier de PHP while()-lus. Elke lusdoorgang schrijft
een tabelrij naar het scherm -->
<?php while ($rij = mysql_fetch_array($result)){
echo ("<tr><td>". $rij['id'] . " </td> " .
"<td>" . $rij['email'] . " </td>" .
"<td>" . $rij['wachtwoord'] . " </td> " .
"<td>" . $rij['admin'] . " </td> " .
"<td>" . $rij['naam'] . " </td> " .
"<td>" . $rij['adres'] . " </td> " .
"<td>" . $rij['plaats'] . " </td> " .
"<td>" . $rij['postcode'] . " </td> " .
"<td>" . $rij['land'] . " </td> " .
"<td>" . $rij['nieuwsbrief'] . " </td></tr>\n ");
}
?>
<!-- Einde van de lus, tabel afsluiten -->
</table>
<hr>
<!-- Eventueel rest van de pagina -->

</body>
</html>
Nooit een wachtwoord in een session zetten en al helemaal nooit in een cookie. Als je aan beveiliging doet dan sla je het wachtwoord gecrypt op in de database, dan is die dus niet meer leesbaar.

Waarom een (onnodige) variabele aanmaken? Kost alleen maar geheugen.
Om de html-quotes niet steeds te hoeven escapen gebruik je enkele quotes voor php.
Dus niet:
<?php
$tekst = "<h2>U bent nog niet aangemeld.</h2>
U kunt <a href=\"login1.php\">hier inloggen</a> of<br>
U kunt zich <a href=\"registreer.php\">hier registreren</a>";
echo($tekst);
?>
Maar:
<?php
echo '<h2>U bent nog niet aangemeld.</h2>
U kunt <a href="login1.php">hier inloggen</a> of<br>
U kunt zich <a href="registreer.php">hier registreren</a>';
?>

Deze regel gaat daar waar die nu staat een fout geven.
Verder hoort die niet vóór je html code maar er in.

<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">


Met deze code kan je dus de gegevens van elke willekeurige gebruiker opvragen. Als je dit dus op je 'beveiligde' pagina hebt staan ben je zeer hackbaar.
- SanThe - op 18/03/2013 17:34:32

Dit is lek => Zie sql-injection.
<?php
$query= "SELECT * from users WHERE id=" .$_GET["id"];
?>


Ga eerst wat doen aan beveiliging en logica.
Ik heb net zelf ook een pagina gemaakt waar de persoon die ingelogd is zijn/haar eigen gegevens kan bekijken en aanpassen.
Sommige van de velden kunnen niet aangepast worden. Deze bevatten dan gegevens die in principe ook nooit hoeven veranderd te worden, bv geboortedatum, geboorteplaats, ...

http://www.plaatscode.be/142138/

Kijk gerust of je er iets van kan gebruiken.
Opmerkingen om dit nog te verbeteren zijn steeds welkom.

Verder zou ik alleen de gegevens voor verbinding met de db in een config bestandje steken en deze includen. Dan hoef je al deze gegevens niet op elke pagina te plaatsen. In mijn voorbeeld heb ik al die gegevens in db_connect.php gestoken


Beste, mysql is verouderd, gebruik het veilige mysqli en lees ook wat omtrent beveiliging rond sql-injection zodat gegevens niet zomaar te grabbel vallen.
En dat na 7 jaar even melden?
Let voortaan even op de datum van het laatste bericht ;-)

Anyway, toen in 2013 was mysql nog gewoon.

Dit topic gaat dicht.

Reageren