Как лучше всего реализовать & ldquo; запомнить меня & rdquo; для сайта? [закрыто]

Я на самом деле не предлагаю, чтобы вы это делали, поскольку индекс UNIQUE, предложенный Piskvor и другими, намного лучший способ сделать это, но вы действительно можете делать то, что пытаетесь:

CREATE TABLE `table_listnames` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `tele` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

Вставить запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `table_listnames`;

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
+----+--------+-----------+------+

Попробуйте снова вставить одну и ту же запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
+----+--------+-----------+------+

Вставить другую запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'John', 'Doe', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'John'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `table_listnames`;

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
|  2 | John   | Doe       | 022  |
+----+--------+-----------+------+

И так далее ...

491
задан 8 revs, 5 users 42% 16 August 2016 в 12:20
поделиться

4 ответа

Улучшенная Персистентная Лучшая практика Cookie Входа в систему

Вы могли использовать эту стратегию, описал здесь как лучшую практику (2006) или обновленная стратегия, описанная здесь (2015):

  1. , Когда пользователь успешно входит в систему с, Помнят Меня проверенный, , cookie входа в систему выпущен в дополнение к стандартному cookie управления сеансами.
  2. cookie входа в систему содержит серийный идентификатор и маркер . Ряд и маркер неотгадываемые случайные числа от соответственно большого пространства. Оба хранятся вместе в таблице базы данных, , маркер хешируется (sha256, прекрасен).
  3. , Когда незарегистрированный пользователь посещает сайт и представляет cookie входа в систему, серийный идентификатор искавший в базе данных .
    1. , Если серийный идентификатор присутствует и хеш маркер соответствия хеш для того серийного идентификатора, пользователя рассматривают , аутентифицировал . новый маркер сгенерирован, новый хеш для маркера хранится по старой записи, и новый cookie входа в систему выпущен пользователю (это должно хорошо снова использовать серийный идентификатор ).
    2. , Если ряд присутствует, но маркер не соответствует, , воровство принято. Пользователь получает сформулированное в категорических выражениях предупреждение, и все помнившие сессии пользователя удалены.
    3. , Если имя пользователя и ряд не присутствуют, cookie входа в систему , проигнорировал .

Этот подход обеспечивает защиту подробно. Если кому-то удается пропустить таблицу базы данных, она не дает взломщику открытую дверь для исполнения роли пользователей.

517
ответ дан 4 revs, 2 users 74% 16 August 2016 в 12:20
поделиться

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

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

9
ответ дан 2 revs, 2 users 83% 16 August 2016 в 12:20
поделиться

Сохраните их UserId и RememberMeToken. Когда они входят в систему с, помнят меня проверенный, генерируют новый RememberMeToken (которые делают недействительным любые другие машины, которые отмечены, помнят меня).

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

7
ответ дан jonnii 16 August 2016 в 12:20
поделиться

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

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

4 способа украсть Ваши cookie (от комментарий Jens Roland на странице @splattne основывал его ответ на):

  1. Путем прерывания его по небезопасной строке (пакетный сниффинг / перехват сеанса)
  2. Путем прямого доступа к браузеру пользователя (или через вредоносный или через физический доступ к полю)
  3. Путем чтения его из базы данных сервера (вероятно, Внедрение SQL, но могло быть что-либо)
  4. взломом XSS (или подобное клиентское использование)
3
ответ дан 2 revs, 2 users 91%Jarl 16 August 2016 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: