Должен ли я использовать UUID или обычный auto_increment для моих идентификаторов пользователя? - PullRequest
0 голосов
/ 19 января 2019

Я создаю приложение с бэкэндом node.js в сочетании с MySQL.В базе данных у меня есть таблица «пользователи», которая содержит информацию о пользователе.В настоящее время они имеют обычные идентификаторы с первичным ключом, поэтому мои идентификаторы пользователей: 0, 1, 2, 3, ...

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я использую веб-токен JSON для аутентификациипользователь и сохранить идентификатор пользователя в полезной нагрузке.Например, моя полезная нагрузка выглядит следующим образом:

userID: 173
userName: PennyWise
userLevel: user

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

Причина, по которой я хотел бы это сделать, заключается в том, что если JWT скомпрометирован и секрет его подписи также скомпрометирован, данные могут быть повреждены и просто изменить идентификатор пользователя на,скажем, 122, а затем этот пользователь будет иметь доступ ко всем данным userID 122 вместо 173.

Я не говорю, что это произойдет - я использую токен, действительный в течение 21 дня (мобильное приложение), и проверяюесли дата выпуска старше 3 часов для ее обновления (с использованием токена обновления), которая затем проверяется по базе данных, чтобы определить, не изменилась ли она - этот токен обновления автоматически изменяется при изменении пароля, для которого был изменен исходный пароль.нужно.Но я бы чувствовал себя более уверенно, если бы идентификаторы не были настолько «очевидными» для чтения.

Есть идеи или предложения по этому поводу?Придерживайтесь обычных идентификаторов (0, 1, 2, 3) или измените на UUID для этого конкретного случая и сохраните его в JWT?

Приветствия!

1 Ответ

0 голосов
/ 19 января 2019

Ради производительности сохраняйте свои идентификаторы пользователей как автоинкрементные целые числа. Это очень помогает производительности.

С другой стороны, UUID, сгенерированные на одной машине, не достаточно сложны, чтобы их можно было назвать безопасными. Если вам нужен криптографически безопасный (трудно угадываемый) секретный идентификатор для каждого пользователя, сгенерируйте его и поместите в строку каждого пользователя. Только не используйте его в качестве первичного ключа. Большинство основных языков имеют безопасный генератор случайных чисел; MySQL нет.

В-третьих, тщательно охраняйте свои секреты JWT и часто меняйте их. Трудно угадать и недолговечны отличная комбинация. Благодаря Гэри Ларсону, если вы не работаете в одной из гигантских компаний, ваш лучший подход к кибербезопасности - «быть более безопасным, чем следующий парень».

By Gary Larson

...