View file cookie.txt

File size: 3.52Kb
Проблемы безопасности, связанные с cookies

Иногда в cookies приходится хранить конфиденциальные данные, и в этом случае разработчик должен позаботиться о том, чтобы информация хранящееся в cookie не была передана третьим лицам. Существует несколько методов защиты информации, хранящейся в cookie:

    * установка области видимости cookies;
    * шифрование;
    * ограничение доступа для доменов;
    * отправка cookies по защищенному запросу.

Наилучшим решением является комплексное применение всех этих способов.
Установка области видимости cookie

Поскольку, по умолчанию, доступ к cookie происходит из корневого каталога, это может создать "дыры" в системе защиты, так как cookies становятся доступными в любом подкаталоге этого каталога. Ограничить доступ к cookies для всех страниц, кроме расположенных в конкретном каталоге, к примеру, /web, можно следующим образом:

      setcookie("name", $value, "/web/");

Однако и в этом случае, к примеру, каталоги /web/index.php, /web1/page.html и т. д. будут удовлетворять этому ограничению. Если такое положение также является нежелательным, можно ограничить область видимости cookies до конкретной страницы:

      setcookie("name", $value, "/web/index.php");

Однако и такой способ в полной мере не решает проблему, так как в этом случае доступ к информации, содержащейся в cookie, может получить, к примеру, скрипт /web/index.php-script/anti_cookie.php. Поэтому появляется необходимость в шифровании.
Шифрование

Применить шифрование к cookies можно разными способами, рассмотрим один из них:

    <?
      // создаем вектор начального состояния для шифрования
      $vector = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_CAST_256, 
                                 MCRYPT_MODE_CFB), MCRYPT_RAND);
      $key = "qwe233jk312jx813893xk312"; // ключ для расшифрования
      $cook_name = "maks";
      $cipher = mcrypt_encrypt(MCRYPT_CAST_256, $key, $cook_name,
                               MCRYPT_MODE_CFB, $vector);
      setcookie("username", $cipher, "/decrypt.php");
    ?>

Как видно из листинга 10.13, расшифровка cookie проводится при помощи скрипта decrypt.php, код которого приведен ниже:

    <?
      // вектор начального состояния остается неизменным
      $vector = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_CAST_256,
                                 MCRYPT_MODE_CFB), MCRYPT_RAND);
      $key = "qwe233jk312jx813893xk312";
      $decrypt_name = mcrypt_ decrypt(MCRYPT_CAST_256, $key, $username,
                                      MCRYPT_MODE_CFB, $vector);
      echo("$decrypt_name, мы рады видеть вас на нашей страничке!");
    ?>

Ограничение доступа для доменов

Для дополнительной безопасности, список доменов, имеющих доступ к cookies, должен быть ограничен. Это можно сделать при помощи следующего кода:

      setcookie("name", $value, "/web/index.php", ".server.com");

При таком ограничении заданной области видимости будут соответствовать домены с именами server.com, myservser.com, php.server.com и т. д., поскольку проверка на допустимость области видимости домена осуществляется по принципу концевого соответствия.
Отправка cookies по защищенному запросу

Не является излишним для cookie, хранящему секретные данные, разрешить отвечать только на защищенные запросы HTTP, так как в этом случае значительно затрудняется перехват данных, которыми обмениваются клиент и сервер. Для обеспечения защищенного соединения, функции setcookie передается шестой параметр со значением, равным 1:

      setcookie("name", $value, time() + 600, "/web/", ".server.com", 1);