2013-11-25 4 views
0

Учитывая простой пример:Как работает проверка подлинности на сервере facebook?

  1. Войти в свой фб счет
  2. Дать статус
  3. Нажмите на dropdrown статус (верхний правый угол)
  4. Открытые инструменты разработчика в вашем браузере и найти HTML для "удалить" вариант
  5. Отредактируйте параметр, который выглядит как story_fbid=10202782137141336

Поскольку стена состоит из нескольких статусов и сообщений, каждая из которых имеет другое значение для story_fbid, facebook должен использовать эти значения для обновления/удаления соответствующих сообщений. Однако, изменяя даже одну цифру этого значения (story_fbid), чтобы сказать, что story_fbid=10202782137141337 подбрасывает ошибка, как показано в снимок ниже.

FB error snapshot link

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

Итак, я искал основное объяснение того, как эта клиентская сторона изменена, html обнаружен на сервере.

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

So. какой метод использует facebook для обнаружения таких изменений?

+0

Если вы просто случайно меняете один символ в уникальном идентификаторе, то, скорее всего, просто нет сообщения (или любого другого объекта) с этим идентификатором ... – CBroe

+0

Что делать, если есть одна таблица, в которой хранятся сообщения нескольких пользователей принадлежащих одному географическому положению? Изменение последней цифры пост-идентификатора в этой таблице может совпадать с идентификатором post-id другого пользователя. –

+0

Возможно, это может быть или не так. И что? Это мало актуально здесь. Facebook знает, какой пользователь зарегистрирован, поэтому они могут проверить, есть ли у них права удалить этот конкретный элемент или нет. – CBroe

ответ

0

Отказ - У меня нет абсолютно никакой идеи, что именно валидация сделаны на стороне Facebook, - это пост состоит исключительно из образованных догадок и общих концепций веб-безопасности.

Любые данные, представленные пользователем, должны рассматриваться, как если бы он был подделан.

Я думаю, что это большой девиз. Данные, которые вы отправляете в Facebook, когда вы любите/комментируете/удаляете сообщение, состоят исключительно из данных, которые были сгенерированы пользователем, отправляющим запрос. Созданы ли эти данные JavaScript, который уже находится на странице Facebook или командой cURL или даже вручную скомпилирован пользователем, не имеет никакого значения для сервера Facebook, отвечающего на этот запрос.

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

  1. Действительно ли этот запрос действителен? Соответствует ли запрос ожидаемому формату? Действительная конечная точка? действительные параметры? Допустимые аргументы?
  2. Есть ли действительный пользователь на другом конце запроса?Используют ли они действительный access_token или аналогичный параметр?
  3. Этот пользователь разрешил, чтобы сделать этот запрос? Является ли объект принадлежащим пользователю? Имеются ли у пользователя необходимые разрешения для выполнения этого запроса?
  4. и т.д ...
  5. и т.д ...
  6. и т.д ...
  7. Много больше и т.д. в ...
  8. Возможно даже более валидация ...

Если кто-нибудь из этих (предполагаемых) проверок не выполняется, пользователю возвращается сообщение об ошибке. Чтобы сохранить точную проверку, секретный Facebook, вероятно, был избран, чтобы возвращать общие ошибки пользователям, чтобы не дать им точно знать, какие проверки выполняются.

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

  • " не может отображаться прямо сейчас »- наиболее общее объяснение.
  • «временно недоступен» - да? как жесткий диск не удалось? отключение электричества? Интернет в центре обработки данных не работает?
  • «ссылка ... истекла» - возможно ли манипулирование токеном доступа?
  • «не имеют права»

Это было бы невозможно, чтобы точно знать, что происходит на стороне Facebook, - и это их намерение.


Подобным образом, сайты, которые дают ошибку входа в систему, аналогичную «Имя пользователя или пароль недействителен» не дают пользователю каких-либо указаний о том, какой параметр является недействительным. Это может быть имя пользователя или пароль. Сказать, что только пароль недопустим, указывает на то, что введенное имя пользователя фактически равно, и это может быть информация, которую сайт не хочет предоставлять.

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