Hoi hoi, ik ben hier nieuw en ben net met PHP begonnen. Nu ben ik een leuke database aan het maken in MySQL en een inlogscherm voor de ecommerce site. Hiervoor maak ik een session aan en nu heb ik wat gelezen over session hijacking.

Nu vroeg ik mezelf af. Kan dat niet worden uitgesloten door alle formulieren op de website te laten filteren met de preg_replace functie?

$gebruiker = preg_replace('#[^A-Za-z0-9?!\s\.\@]#i', '', $_SESSION["gebruiker"]);

Doormiddel van het filter is er dan nog mogelijkheid om met een script te werken?

Ik hoor het graag van jullie :), alvast bedankt!

Dave
Nope, dat gaat niet werken. De sessie ID staat in een cookie (meestal PHPSESSID) en het gaat juist om die variabele. Die moet, theoretisch, vast blijven zitten aan de huidige gebruiker. Dus, de combinatie van browser en IP. Maar vergis je niet, want er zijn ook genoeg providers in de wereld die dynamische IP's leveren. Dat betekend dat, in tegenstelling tot de meeste Nederlandse providers, je in één keer een ander IP kan krijgen. Daar moet je dus wel rekening mee houden.

Jouw preg_replace heeft in die zin geen nut. Het gaat hier om een variabele binnen de sessie, en die is (in tegenstelling tot een cookie) niet aan te passen. Tenzij je ergens anders binnen jouw website de mogelijkheid geeft om $_SESSION['gebruiker'] te bewerken, dan zou hier weer een andere waarde in kunnen worden gezet. Maar ook dat valt niet onder session hijacking.
Thanks voor de snelle reactie Chris.

Ik heb de cookies bekeken en ik heb elke keer een andere variabele. Ik gebruik het volgende:

<?php

session_start();
if (!isset($_SESSION["gebruiker"])) {
header("location: admin_login.php");
exit();
}
// Check gebruiker of deze in database is
$gebruikerID = preg_replace('#[^0-9]#i', '', $_SESSION["id"]); // filter
$gebruiker = preg_replace('#[^A-Za-z0-9?!\s\.\@]#i', '', $_SESSION["gebruiker"]); // filter
$wachtwoord = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["wachtwoord"]); // filter

// query gebruker en password session var gelijk aan db informatie
// verbinding mysql
include "verbinding_mysql.php";
$sql = mysql_query("SELECT * FROM admin WHERE id='$gebruikerID' AND gebruiker='$gebruiker' AND wachtwoord='$wachtwoord' LIMIT 1"); // query de gebruiker


// ------- kijken of persoon in database is ---------
$existCount = mysql_num_rows($sql); // count row nums
if ($existCount == 0) { // evalueer count
echo "Login niet in database.";
exit();
}

is dit veilig genoeg?

Cookie variabele : Apr 15 2013 13:55:00 tlpetrrogotq49ksnh06con1s2
Cookie variabele : veqve824l6faeslig74ogi2te4 Apr 15 2013 13:57:58

Cookie krijgt elke keer een andere nummer? Hoe zit dat dan?
Ik heb geen idee wat je aan het doen bent maar het heeft in ieder geval niks met session hijacking te maken.
@ Santhe

Misschien stel ik de verkeerde vraag? Mijn vraag is eigenlijk........is mijn loginpagina op deze manier voldoende beveiligd tegen hackers?
We missen code: hoe vul je $_SESSION?
Je zet iets in de session en als je het er weer uithaalt gaat er een preg_match() overheen.
Ik zie daar het nut niet van.

Nooit een password in een COOKIE, SESSION of iets gelijkwaardigs zetten.
Een password hoort, goed beveiligd met sha1() md5() of wat dan ook, alleen in de database
}
$_SESSION["id"] = $id;
$_SESSION["gebruiker"] = $gebruiker;
$_SESSION["wachtwoord"] = $wachtwoord;
header("location: index.php");
exit();
} else {
echo 'verkeerde informatie <a href="index.php">Click Here</a>';
exit();
}
}
?>

formulier
En waar komen $id, $gebruiker en $wachtwoord dan vandaan?

Ik heb zo'n vermoeden dat je controles op de verkeerde plaats uitvoert.
@ Santhe

Ik heb op youtube gezien hoe ze via een tekstbox javascript uploaden, met de preg_replace filter je dit lijkt mij?
En waar komen $id, $gebruiker en $wachtwoord vandaan?

Reageren