Установка куки в php и безопасность сайта - PullRequest
2 голосов
/ 24 октября 2011

Я создаю форум и не уверен в том, как лучше всего настроить cookie.

Вот файл cookie, который я создаю, когда пользователь регистрирует сайт:

       setCookie($name,$ip,time()+300000,"/");

вместо этого: время () + 300000. Я хочу, чтобы печенье длилось вечно, но я не уверен, как это сделать.

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

Еще один вопрос, как мне проверить, разрешает ли пользователь файлы cookie в своем браузере?

UPDATE:

Я поставлю это, как только проверка логина будет действительной: SetCookie ($ имя, $ ф, время () + 60 * 60 * 24 * 365, "/");

UPDATE:

        if(!isset($_COOKIE['$name'])
        {
            $salt="androidprogrammer26@yahoo.com";
            $hash = SHA2(salt + $_POST['pass']);
            setCookie($name,$hash,time()+60*60*24*365*50,"/");
        }

Ответы [ 4 ]

2 голосов
/ 24 октября 2011

Для продолжительности просто используйте достаточно большое число вместо 300000.

time() + 60 * 60 * 24 * 366 * 15 дает вам 15 лет.

Чтобы предотвратить вмешательство, используйте безопасную хеш-функцию (например, SHA-2 ), сохраните секрет salt (например, 256-битную случайную строку) на своем сервере, вычислите hash = SHA2(salt + data) и установите файл cookie, содержащий hash.

Теперь, когда вы читаете куки, все, что вам нужно сделать, это убедиться, что hash имеет правильное значение.

1 голос
/ 24 октября 2011

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

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

О "вечных печеньях" вы можете установить срок действия до 50 лет.

1 голос
/ 24 октября 2011

Вы можете , а не установить cookie навсегда, но вы можете установить его на очень долгое время и обновлять каждый раз, когда пользователь посещает ваш сайт.

Ко второй части: дополнительно сохраните значения файлов cookie в вашей базе данных, и, если они совпадают, вы установите их, если не кто-то пытался что-то манипулировать.

Другой вариант - хранить только файлыидентификатор в файле cookie и значения в вашей базе данных.Но будьте осторожны и убедитесь, что никто не может угадать эти идентификаторы.

Кстати: я не думаю, что IP-адрес пользователя должен постоянно храниться в его cookie, потому что большинству людей понадобится новый постоянный cookie каждый день:-D

ОБНОВЛЕНИЕ:

Неправильно использовать ip пользователей для идентификации, он меняется каждый день.Сделайте это так: сохраните соль для каждого пользователя в базе данных.Создайте его случайным образом, как "jfdklsjfdsohfdsughfdjkhg".Если пользователь входит в систему, сохраните cookie "LoggedIn" со значением md5($username.$salt), дополнительным к cookie, с сохранением идентификатора пользователя.Если вы читаете куки-файл, вам нужно только сравнить хеш с md5(databaseName.databaseHash).. Если он равен, куки-файл хорош.Вы должны быть уверены, что соль хорошо защищена в этой системе (это должна знать только ваша система).

if(isset($_COOKIE["LoggedIn"))
{
    $userid = $_COOKIE["UserId"] // Second cookie, not hashed to know the user's id
    //get Values from Database here => $database_name, $database_salt
    if(md5($database_name.$database_salt) == $_COOKIE["LoggedIn"])
    {
         //OK
    }
}
0 голосов
/ 24 октября 2011

Вы не можете установить cookie навсегда. Вы можете установить длительный срок действия файла cookie. Пожалуйста, сохраните данные в вашей базе данных или сеансе и попробуйте сопоставить их. Рекомендуется использовать сессию, а не куки, данные сессии не могут быть изменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...