Как сделать мой код более безопасным

Я сделал голосование по комментариям как тот, который этот веб-сайт имеет (что-то подобное), и я немного обеспокоен возможным неправильным употреблением запроса HTTP. Вы будете знать то, что я имею в виду после того, как я показываю Вам сомнительный код:

$.ajax({
  type: 'POST',
  url: 'http://localhost/comments/vote_down/' + post_id
});

Теперь все еще на localhost, но это доберется до сети в конечном счете. Что, если кто-то просто делает некоторый сценарий который will run n times этот URL http://localhost/comments/vote_down/post_id .

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

Править

Я вижу некоторые ответы, не те я искал до сих пор.

Возможно, я ожидаю слишком много, есть ли способ, которым я могу непосредственно отказаться от этого запроса любому, но кто-то перенаправил от localhost (или website.com), после того, как x пытается сделать так.

Возможно, некоторая аутентификация заголовка? Я не очень в тот, который является главной причиной, почему я спрашиваю.

Править

Также, что я обнаружил случайно приблизительно минуту или поэтому назад, я просматривал канавку, немного подобных вопросов и мой поджигатель шли, я добавил один вопрос в избранное.. видел консольный ответ сообщения 200 OK тогда я попробовал его в течение подобных 10 раз только для наблюдения, когда будет я быть отклоненным, чтобы сделать то же снова.. в конечном счете я скучал.. таким образом, если StackOverflow не решил это.. что является мной пытающийся сделать: =)

7
задан Gandalf StormCrow 27 January 2010 в 23:36
поделиться

7 ответов

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

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

Дополнительные опции:

  • Реализуйте captcha

В ответ на ваше редактирование:

Если вы говорите о проверке правильности ссылающейся страницы, вам не повезло. Это невероятно легко подделать. Вы можете реализовать проверку токена, где вы генерируете хэш, который действителен в течение X секунд и отклоняете все запросы с недействительным или истекшим сроком действия хэша. Однако это не помешает людям проголосовать несколько раз.

В ответ на ваше второе редактирование:

Статусный код 200 только означает, что http запрос был успешным, то, что логика приложения решила сделать с этим запросом, является совершенно другой проблемой. Вы можете отказать в голосовании и вернуть 200, так же как вы можете вернуть 403 (что, вероятно, было бы более уместно в данном случае).

6
ответ дан 6 December 2019 в 23:05
поделиться

Я надеюсь, что это будет иметь место, чтобы помочь ответить на ваш вопрос. Узнайте этот веб-сайт: https://panopticlick.eff.org/ . В основном то, что он пытается определить вас на основе ваших различных системных настроек, установленные шрифты, возможности браузера, часовой пояс и т. Д. Я только что отправил его вокруг моего офиса и до сих пор мы все уникально.

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

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

  • Не позволяйте людям голосовать, если у них не включено файлов cookie
  • Alludher Captcha для пользователей, которые не вошли в систему
  • Пользователей профиля на основе Hashes их системной настройки (HASH из шрифтов, установленных, возможностей браузера, возможностей браузера, возможностей браузера TimeZone и т. Д.)
  • У вас есть система входа в систему, чтобы пользователи могли войти в систему, чтобы проголосовать

, когда кто-то голосует, вы храните их идентификатор пользователя (если они вошли в систему), их системные хеши и их печенье против их голосов. Это предотвратит зарегистрированные пользователи из голосования, входить в систему, а затем снова голосовать анонимно - потому что их системные хэши и cookie (если они не надоели его очистить), уже привязаны к голосованию.

Что-то еще, что вы можете сделать, это сделать Tripwire для обнаружения, если голосование на определенном посте становится забитым в какое-либо конкретное направление. Если он забил (скажем, 20 голосов в минуту в течение 10 минут, и большой процент этих голосов был в том же направлении), попробуйте профилировать UPVOTES, глядя на IP-адрес, системные хэши и т. Д. На основе Произвольный процент возможных вредоносных хитов, вы могли бы заблокировать голосование на этом посте на 15 минут.

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

Надеюсь, это поможет

ура IAIN

1
ответ дан 6 December 2019 в 23:05
поделиться
-

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

0
ответ дан 6 December 2019 в 23:05
поделиться

Вам придется делать больше, чем сохранить голосование только для идентификатора сообщения. Вам придется хранить запись для каждого отдельного отделения голосования.

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

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

Если требуют аутентификации пользователя, прежде чем они смогут голосовать, не является приемлемым, то вы можете перейти по IP-адресу, а затем включить количество голосов, чтобы быть в состоянии быть отложенным от этого IP-интервала. Например, после того, как голос будет отличаться от xxx.xxx.xxx.xxx, он не может проголосовать еще раз еще на 15 минут. Это не сломает Интернет для людей за прокси, но уменьшит количество игр, которые можно сделать.

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

3
ответ дан 6 December 2019 в 23:05
поделиться

Вы должны аутентифицироваться через токен.

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

Что вы должны сделать, так это проверить на стороне сервера, допустим, вы проверите MD5 хэш ( md5(1) = c4ca4238a0b923820dcc509a6f75849b )

http://localhost/comments/vote_down/1?hash=c4ca4238a0b923820dcc509a6f75849b

Теперь на вашем сервере вы должны сделать хэш post_id и проверить, совпадают ли хэш-параметры, если совпадают, то разрешите проголосовать.

Но тогда я все еще могу просто продолжать рассылать спам от пользователей, не зная об этом через

Что вам нужно будет сделать, так это хэшировать как post_id, так и user_id (из сессии), таким образом, один хэш от одного пользователя не будет одинаковым от одного и того же к другому.

User: 1
Post_id: 1
md5(11) = 6512bd43d9caa6e02c990b0a82652dca

User: 2
Post_id: 1
md5(12) = c20ad4d76fe97759aa27a0c99bff6710

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

1
ответ дан 6 December 2019 в 23:05
поделиться

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

Надеюсь, это поможет,

0
ответ дан 6 December 2019 в 23:05
поделиться

Вы можете использовать CAPTCHA (рекомендую reCaptcha , поскольку оно способствует оцифровкам напечатано работает одновременно) для устранения, по крайней мере, на основе голосов на основе бота. Для предотвращения нескольких человеческих голосов, рассмотрите возможность подсчета на основе полуаналогичного идентификатора, такого как IP-адрес, а также строка пользовательского агента браузера или что-то еще. Или проверьте голосование на основе учетной записи пользователя (и, очевидно, поставьте CAPTCHA на страницу регистрации пользователя).

0
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

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