Безопасность Facebook Javascript SDK

Я использую facebook javascript sdk для обеспечения возможности входа пользователя на веб-сайт.

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

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

Я боюсь, что с javascript кто-то может подделать идентификатор facebook и просто вытащить все, что захочет.

Я знаю, что php sdk обеспечит надежное решение этой проблемы, но мне нравится javascript в основном потому, что он прост в использовании, и у меня есть основа для него (признаюсь, я ленив).

Итак, мои вопросы:

  1. Будет ли эта установка такой небезопасной, как мне кажется?

  2. Могу ли я что-нибудь сделать для повышения безопасности такой системы, кроме перехода на php sdk?

Спасибо!


person Joshua    schedule 21.07.2011    source источник
comment
Будете ли вы сохранять данные из их Facebook или данные, связанные с вашим сайтом? и вы делаете это через SSL?   -  person zachzurn    schedule 22.07.2011
comment
Я осмелюсь сказать, что использование javascript для всего, что отдаленно связано с проверкой, небезопасно — помните, javascript выполняется на стороне клиента, поэтому для всех интенсивных целей злоумышленник может манипулировать любым вводом, который вы получаете, и может выборочно предотвратить проверку на основе javascript, которую вы имеете от запуска.   -  person uscere90    schedule 22.07.2011
comment
Единственное, что я хотел бы сохранить, это пользовательский идентификатор пользователя, используемый для определения правильной таблицы, из которой можно добавлять/извлекать данные, и возраста. Не выполняется с использованием SSL.   -  person Joshua    schedule 22.07.2011


Ответы (2)


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

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

ИЗМЕНИТЬ

Есть несколько случаев, когда вы получаете подписанный запрос от пользователя:

* A signed_request is passed to Apps on Facebook.com when they are loaded into the Facebook environment
* A signed_request is passed to any app that has registered an Deauthorized Callback in the Developer App whenever a given user removes the app using the App Dashboard
* A signed_request is passed to apps that use the Registration Plugin whenever a user successfully registers with their app

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

Также подписанный запрос находится в URL-адресе (param = "signed_request"). Я всегда разбираю его с помощью С#, но я уверен, что вы можете получить его хотя бы через javascript.

person Stanley Cup Phil    schedule 21.07.2011
comment
Прочитав немного, в идеале мне бы хотелось получить зашифрованную строку из facebook, содержащую uid пользователя, которую я мог бы затем прочитать, используя секретный ключ моего приложения fb. Кажется, что подписанный запрос идеально подходит под это описание, однако я не знаю, как я могу вызвать один из них по запросу? В идеале использовать javascript API. Если кто-нибудь знает, возможно ли это, я хотел бы знать. Токен доступа fb — это то, что я могу найти по запросу, но uid не зашифрован, это просто строка в середине. - person Joshua; 22.07.2011
comment
Первое утверждение о том, что идентификаторы facebook известны только пользователю, неверно. В сети есть множество сайтов, которые вы можете использовать для поиска идентификатора, поэтому они не являются безопасными. Вы должны использовать подписанный запрос. - person eagle779; 15.08.2014

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

person Nick Parsons    schedule 24.10.2014