Я искал все места для этого, и я не могу получить полный ответ на это. Так что, если ответ уже существует в стеке, я заранее извиняюсь.
Мне нужен уникальный и случайный идентификатор, чтобы пользователи на моем веб-сайте не могли угадать следующий номер и просто переходить к чужой информации. Я планирую придерживаться возрастающего идентификатора для первичного ключа, но также сохранить случайный и уникальный идентификатор (своего рода хэш) для этой строки в БД и поместить в нее индекс.
Из моих поисков я понимаю, что хотел бы избежать столкновений, и я прочитал некоторые упоминания о SHA1.
Мои основные требования
- Что-то меньше, чем GUID. (Выглядит ужасно в URL)
- Должен быть уникальным
- Избегать столкновений
- Не длинный список странных символов, которые невозможно прочитать.
Примером того, что я ищу, может быть www.somesite.com/page.aspx?id=AF78FEB
Я не уверен, должен ли я реализовывать это в базе данных (я использую SQL Server 2005) или в коде (я использую C # ASP.Net)
EDIT:
Из всего прочитанного мною я понимаю, что это безопасность через мрак. Я намерен иметь надлежащую авторизацию и аутентификацию для доступа к страницам. Я буду использовать .Net для аутентификации и авторизации. Но как только законный пользователь вошел в систему и получает доступ к легитимной (но динамически создаваемой странице), заполненной ссылками на принадлежащие ему элементы. Например, ссылка может быть www.site.com/page.aspx?item_id=123. Что мешает ему нажать на эту ссылку, а затем изменить вышеуказанный URL-адрес, чтобы перейти на www.site.com/page.aspx?item_id=456, который НЕ принадлежит ему? Я знаю, что некоторые технологии Java, такие как Struts (я исправлюсь), хранят все в сеансе и каким-то образом работают с этим, но я не знаю, как это сделать.