PHP expert |
|
en alsnog zijn er manieren om cookies te hijacken. Dus doe zoals ik zei: beveilig niet enkel je formulieren maar ook je cookies, dmv het ip.
Hier is een psuedocode voorbeeld van hoe je het kan doen:
<?php
function encrypt_algo($what, $key) {
// ROEP HIER JE ENCRYPTIE ALGORITME AAN
return $crap;
}
function decrypt_algo($what, $key) {
// ...
}
function findUser($key) {
if(isset($_COOKIE)) {
$ip = encrypt_algo($_SERVER['REMOTE_ADDR'], $key);
$ip = serialize($ip);
if(isset($_COOKIE[$ip)) {
$data = unserialize($_COOKIE['ip']);
$username = decryptie_algo($data[0], $key);
$pass = decrypt_algo($data[1], $key);
return array("username" => $username, "pass" => $pass);
}
}
return false; // cookie not set
}
function setUserCookie($username, $pass, $key, $time) {
$key_for_cookie = serialize(encrypt_algo($_SERVER['REMOTE_ADDR'], $key));
$data_for_cookie = serialize(array(encrypt_algo($username, $key), encrypt_algo($pass, $key)));
setCookie($key_for_cookie, $data_for_cookie, $time);
return true;
}
Use:
setUserCookie('koen', 'kwartvankakke', 'abc', time()+3600);
$my_cookie_data = findUser('abc');
<?php function encrypt_algo($what, $key) { // ROEP HIER JE ENCRYPTIE ALGORITME AAN return $crap; } function decrypt_algo($what, $key) { // ... } function findUser($key) { $ip = encrypt_algo($_SERVER['REMOTE_ADDR'], $key); if(isset($_COOKIE[$ip)) { $username = decryptie_algo($data[0], $key); $pass = decrypt_algo($data[1], $key); return array("username" => $username, "pass" => $pass); } } return false; // cookie not set } function setUserCookie($username, $pass, $key, $time) { $key_for_cookie = serialize(encrypt_algo ($_SERVER['REMOTE_ADDR'], $key)); $data_for_cookie = serialize(array(encrypt_algo ($username, $key), encrypt_algo ($pass, $key))); setCookie($key_for_cookie, $data_for_cookie, $time); return true; } Use: setUserCookie ('koen', 'kwartvankakke', 'abc', time()+3600);$my_cookie_data = findUser('abc');
Ik heb ook in een oud tijdperk daar enkele classes voor geschreven, zodat je het zo kan aanroepen:
<?php
$core->loadClass("Nemesis_Cookie");
require 'Nemesis/Cookie.php';
$cookie = Nemesis_Cookie::createInstance(Nemesis_Cookie::SAFE_MODE);
$cookie->add("naam", "koen");
$cookie->add("pass", md5("abc"));
$cookie->save();
var_dump($cookie->get());
<?php $core->loadClass("Nemesis_Cookie"); require 'Nemesis/Cookie.php'; $cookie = Nemesis_Cookie::createInstance(Nemesis_Cookie::SAFE_MODE); $cookie->add("naam", "koen"); $cookie->add("pass", md5("abc")); $cookie->save();
(dit is overigens geen wrapper rond $_COOKIE maar maakt gebruik van een beveiligingsmethode gebasseerd op bovenstaande pseudocode.) |