Evercookie – ochrona ciasteczka przed odczytem

Poprzedni artykuł o Evercookie ( http://darkgl.pl/index.php/2014/04/10/evercookie-prawie-niezniszczalne-ciasteczka/ )

W całym poście będę używał jQuery , php wraz z biblioteką mcrypt.

Cały proces można opisać bardzo łatwo zamiast przechowywać w ciasteczkach wrażliwe dane w postaci łatwej do odczytania zaszyfrujemy je po stronie serwera algorytmem RIJNDAEL 128 ( podam też link do kodu aes ).

Kod JavaScript zapisanie ciasteczka

var ec = new evercookie(); 

$.ajax({
  type: "POST",
  url: "encode.php"
}).done(function( msg ) {
    ec.set( "secret" , msg ); 
});

Kod PHP zakodowanie ciasteczka

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
$text = "Very secret text !";

echo mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

Kod JavaScript odczytanie ciasteczka

var ec = new evercookie(); 

ec.get( "secret", function(value) { 
   $.ajax({
      type: "POST",
      url: "some.php",
      data: { data: value }
   })
}); 

Kod PHP odkowanie ciasteczka

$iv = '';//wektory inicializujący
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
$text = $_POST[ 'data' ];
$decryptedText = mcrypt_decrypt( MCRYPT_RIJNDAEL_128 , $key, $text, MCRYPT_MODE_CBC, $iv );

Wektor inicjalizujący ( $iv ) musi być ten sam podczas kodowania i dekodowania dlatego $iv z pierwszego skryptu musimy gdzieś zapisać np. w bazie danych.

Linki z których korzystałem
http://php.net/manual/en/book.mcrypt.php
http://stackoverflow.com/questions/6770370/aes-256-encryption-in-php

Implementacja aes
http://www.movable-type.co.uk/scripts/aes-php.html

3 komentarzy o “Evercookie – ochrona ciasteczka przed odczytem

  1. Przecież to nie ma sensu. Już lepiej w ciasteczku trzymać tylko jakiś session_id, a na serwerze zamiast szyfrować i tracić na to czas zostawić resztę danych.

Dodaj komentarz