2015-11-22 5 views
0

Это то, что я придумал, чтобы сохранить файл cookie для проверки пользователя на моем сайте.Как долго должен быть токен моего печенья?

Как долго должен быть установлен токен? Достаточно ли 33 или должно быть 64? и достаточно ли моего поколения?

<?PHP 
$token = bin2hex(openssl_random_pseudo_bytes(33)); 
echo $token.'<br>'; 
$hash = hash('sha256', $token); 
echo $hash; 

//Test user db and local cookie 
    $stored_hash = '5be39777ad41916c5fa1e78681bfc8793a5cfe7c27842846ad23396e44b390a7'; 
    $cookie = '1a9243f95354252d937d2b99e64a7eeb462e00c72b26d488426f08ef11667522c6'; 

$cookie_hash = hash('sha256', $cookie); 

if(hash_equals($stored_hash, $cookie_hash)) 
    echo 'true'; 
else 
    echo 'false'; 
?> 
+0

как параноик вы чувствуете? сколько же токенов вы собираетесь хранить? –

+0

пользователей около 10 тыс. Пользователей. поскольку параноик просто хочет быть в безопасности. есть ли огромная разница в безопасности от 33 и 64 длины? – user2570937

+0

Просто используйте файлы cookie cookie и измените php.ini, в частности хеш-функцию и хэш-биты на символ, http://php.net/manual/en/session.configuration.php#ini.session.hash-function – Xorifelse

ответ

1

Первое предложение улучшить токен, вместо использования шестнадцатеричного представления я бы рекомендовал использовать base62 кодировку. Такая строка содержит символы верхнего и нижнего регистра и поэтому может быть короче с той же информацией.

Далее предположим, что вы создали случайный токен с 20 закодированными символами base62, это позволит использовать комбинации 700'000'000'000'000'000'000'000'000'000'000'000'000! Даже если вы можете переборщить с 15 Giga SHA256/second, для поиска правильного токена потребуется около 7E17 лет. Такой токен с 20 символами требует всего 15 байт, поэтому 33 байта, которые вы предложили в своем первом подходе, наверняка более чем достаточно.

Я написал небольшой class, чтобы помочь генерировать такие маркеры base62, взгляните на него, если вы заинтересованы.

+0

@RyanVincent - Нет закодированных строк base62 содержат 0-9 a-z A-Z, в то время как строки с кодировкой base64 также содержат символ + и =, что может вызвать проблемы при использовании в URL-адресе. – martinstoeckli

+0

Прошу прощения - Плохо! Я только что узнал какую-то новую информацию. Спасибо. –

+0

@ RyanVincent - Должен был упомянуть об этом явно, без проблем. – martinstoeckli

Смежные вопросы