Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: VladSun в Jun 26, 2007, 23:09



Титла: Fingerprint на информация
Публикувано от: VladSun в Jun 26, 2007, 23:09
Ситуацията е следната: web приложение, което не иска login. Всичко се пази client-side.

Та... направил съм си две функции за работа с cookies. Целта ми е да направя така, че запазената информация да може да бъде проверявана за модификация чрез fingerprint (hash сума) и съответно да избегна валидацията й. Функциите са:

Примерен код

$seed ='dfsjfslnm4312890nasxd32897dxgszbd972';

function getSecCInfo($name)
{
   global $seed;

   if (!empty($_COOKIE[$name]) && !empty($_COOKIE[$name."_HASH"]))
   {
      $pref = unserialize(base64_decode($_COOKIE[$name]));
      if (base64_decode($_COOKIE[$name."_HASH"]) != md5($_COOKIE[$name].$seed) )
      {
         return null;
      }
      return $pref;
   }
   return null;
}

function setSecCInfo($pref, $name, $months = 1)
{
   global $seed;

   $ser = base64_encode(serialize($pref));
   setcookie($name, $ser, time() + 3600*24*30*$months);
   setcookie($name."_HASH", base64_encode(md5($ser.$seed)), time() + 3600*24*30*$months);
}


Някой правил ли е нещо подобно и ако е, какви са плюсовете и минусите? Естествено други решения и идеи са добре дошли. :)

Благодаря предварително!

ПП: Някои от бисквитките *може би* ще пазят цели SQL заявки в чист текст ... трябва да е сигурно, че нищо не е проеменяно ...

ППП: Между другото - нужно ли е да се прави base64encode на md5 string?





Титла: Fingerprint на информация
Публикувано от: VladSun в Jun 27, 2007, 21:54
Насочиха ме към HMAC-md5 или HMAC-SHA1

http://www.faqs.org/rfcs/rfc2104.html
http://www-cse.ucsd.edu/~mihir/papers/kmd5.pdf


Титла: Fingerprint на информация
Публикувано от: VladSun в Jul 01, 2007, 00:49
Цитат (VladSun @ Юни 26 2007,23:09)
ППП: Между другото - нужно ли е да се прави base64encode на md5 string?

Не! :)


Титла: Fingerprint на информация
Публикувано от: VladSun в Jul 23, 2007, 02:54
PHP:

Примерен код

function hmac($algo, $data, $passwd)
{
 /* md5 and sha1 only */
 $algo = strtolower($algo);
 $p = array('md5'=>'H32','sha1'=>'H40');

 if(strlen($passwd) > 64) $passwd=pack($p[$algo], $algo($passwd));
 if(strlen($passwd) < 64) $passwd=str_pad($passwd, 64, chr(0));

 $ipad = substr($passwd, 0, 64) ^ str_repeat(chr(0x36), 64);
 $opad = substr($passwd, 0, 64) ^ str_repeat(chr(0x5C), 64);

 return($algo($opad.pack($p[$algo], $algo($ipad.$data))));
}


*взето от демопакета на epay-bg


Perl:

Digest::SHA1
Digest::MD5
Digest::HMAC