django & facebook: безопасность и дизайн для веб-приложения facebook, которое выполняет сторонний вход в систему от имени пользователя - PullRequest
1 голос
/ 26 апреля 2011

Я пишу веб-приложение на холсте Facebook, которое выполняет вход (используя urllib) на сторонний веб-сайт и выполняет действия от имени пользователя.Это означает, что у меня есть 2 аккаунта;учетная запись, которую пользователь использует в моем веб-приложении (через Facebook), и учетная запись, которую приложение использует для входа в систему от своего имени (с указанием данных о пользователе / ​​пароле, предоставленных пользователем).

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

Когда пользователь входит в систему (и дает приложению свой токен доступа), приложение может запросить значение через API и зашифровать / расшифровать свой сторонний пароль с помощью этого.Любой, имеющий доступ к серверу, не сможет сделать этот запрос без входа пользователя в приложение.(Это по-прежнему означает, что кто-то, отслеживающий сервер, может получить пароль сторонних пользователей, вошедших в систему, но любой, кто получил одноразовый доступ к БД, не сможет увидеть пароли.) Это желаемое за действительное?

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

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

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

Что бы вы ни делали помимо этого, это было бы просто безопасностью через неизвестность.Ключевым моментом здесь является обеспечение безопасности вашего сервера, чтобы никто не получил к нему доступ.

0 голосов
/ 10 мая 2011

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

0 голосов
/ 10 мая 2011

Полагаю, вы могли бы хранить логины ТОЛЬКО на клиенте в каком-то локальном хранилище и выполнять все действия, связанные с третьей стороной, с клиента в JS.

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

Кроме того, он имеет преимущество в распределении нагрузки на клиентов

Я знаю, что вы не пометили вопрос с помощью javascript, и вы, кажется, хотите серверЧистое решение, но мне кажется, это лучшее решение.пользователь хранит свои данные ..

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