2012-02-22 4 views
2

Я пытаюсь найти хороший способ избежать прямого использования идентификаторов в URL-адресах для поиска записей в таблице. Основная причина заключается в том, что по соображениям конфиденциальности я не хочу, чтобы мои пользователи могли просто изменить, скажем, /? Unique_id = 10 на /? Unique_id = 11 и посмотреть чужую информацию.Лучшая реализация ID ID

Я заметил, что многие сайты используют случайно генерируемые строки, но какова наилучшая структурная реализация чего-то подобного?

Спасибо!

О, и я сомневаюсь, что это важно, но я использую PHP.

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

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

+2

Насколько чувствительна информация, которую вы показываете? –

+0

Любой метод 'guid' /' uuid' будет работать, но вы не должны полагаться на неизвестность ID для безопасности ... – Wrikken

+0

Вы пытаетесь ограничить доступ к собственной информации пользователя?Если да, могу ли я предложить вам использовать переменные сеанса на основе данных входа пользователя? – SenorAmor

ответ

3

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

Вы можете использовать хэш чего-то типа record1, record2 и т. Д., Но определенный хакер может легко это сделать.

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

Так что, если ваш идентификатор относится к сообщению, может быть, принять титул и заменить пробелы с -

например. www.example.com/article.php?id=Summer-is-the-best-time-of-year

+0

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

+0

GUID! в противном случае вам нужно использовать поле автоинкремента в сочетании с чем-то другим и превратиться в буквы типа «123-GHF», который может угадать 123 бит, но не буквы. –

0

вы можете зашифровать их, используя md5 (id), и выполнить поиск записи, имеющей тот же md5 (id) т.е.

select * from table where md5(id) = '$encrypted' 
+1

Это должно выполнить полное сканирование таблицы и вычислять и md5 для каждой строки в вашей таблице. Если у вас больше нескольких строк, производительность будет очень плохой. – recursive

2

Вы не должны были иметь дело с этим на уровне URL. Вы просто позаботитесь об этом на сессии, поэтому, если пользователь 123 попытается получить доступ к вашему сайту.com/unique_id=456, проверка сеанса помешает ему это сделать. Я имею в виду, что вы говорите о частных страницах, не так ли?

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

0

Почему бы не использовать вызовы AJAX для любых запросов к БД, а не включать их в URL $ _GET.

+0

Как это улучшит безопасность? Идентификатор все еще отображается клиенту, независимо от того, используется ли Ajax для запроса или нет. –

+0

Запросы AJAX не отображаются клиенту и не закодированы в URL-адресе, как переменные, передаваемые через $ _GET – xXPhenom22Xx

1

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

This answer показывает просто, как создать уникальный идентификатор.

+0

Это действительно идеально подходит для того, что я пытаюсь сделать. Я понятия не имел, что функция существует. Спасибо! –

Смежные вопросы