2013-05-05 1 views
0

Я работаю на веб-сайте игрушек и я реализовал кнопку upvote, с OnClick атрибута, как это:Как создать идентификатор пользователя для веб-сайта?

Dajaxice.debater.upvote(
    upvote_js,//Don't worry about this, it's just dealing with AJAX 
    { 
     'username' : 'bob',//bob is the user being upvoted by 
    } 
) 

Вы видите, проблема заключается в веб-страница использует имя пользователя непосредственно, это плохой дизайн, так как пользователь может легко открыть хром-консоль, изменить имена пользователей и подделать запрос, чтобы upvote сказал alice вместо bob. Я исследовал пару веб-сайтов и вижу, что они используют длинную строку, похожую на хэш, чтобы представлять пользователей. Мне интересно, как это обычно выполняется? В более общем виде, я ищу алгоритм, который:

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

Как реализован сервер? Вы используете рамки? – Aya

+0

@Aya Я использую django – dorafmon

+0

Вы используете встроенную систему аутентификации Django (https://docs.djangoproject.com/en/dev/topics/auth/)? – Aya

ответ

2

Вы можете создать зашифрованную форму строки (хеш, по определению, не обратим).

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

Обычный способ сделать обратимого шифрования с base64:

>>> import base64 
>>> secret = base64.b64encode('bob') 
>>> secret 
'Ym9i' 
>>> print base64.b64decode('Ym9i') 
bob 
1

Звуки больше как это вопрос дизайна, а не проблема кодирования.

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

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

Одним из распространенных решений является отслеживание того, какие IP-адреса имеют приоритет для конкретного пользователя, и запретить несколько повышений для одного и того же пользователя с одного и того же IP-адреса.