django&;脸谱网:安全与安全;为代表用户执行第三方登录的facebook webapp设计

django&;脸谱网:安全与安全;为代表用户执行第三方登录的facebook webapp设计,django,security,facebook,passwords,Django,Security,Facebook,Passwords,我正在编写一个Facebook canvas webapp,它可以登录(使用urllib)第三方网站并代表用户执行操作。这意味着我有2个帐户;用户在my webapp中拥有的帐户(通过facebook)和该应用程序用于代表他们进行登录的帐户(用户提供用户/密码详细信息) 我显然不想在数据库中使用明文密码。但我也不希望用户每次执行操作时都必须输入密码。我想让他们在注册时输入一次密码,我想对密码进行加密,但我加密的目的是什么? 任何获得访问权限的人都可以使用服务器上的任何密钥(即无用密钥),因此我考

我正在编写一个Facebook canvas webapp,它可以登录(使用urllib)第三方网站并代表用户执行操作。这意味着我有2个帐户;用户在my webapp中拥有的帐户(通过facebook)和该应用程序用于代表他们进行登录的帐户(用户提供用户/密码详细信息)

我显然不想在数据库中使用明文密码。但我也不希望用户每次执行操作时都必须输入密码。我想让他们在注册时输入一次密码,我想对密码进行加密,但我加密的目的是什么? 任何获得访问权限的人都可以使用服务器上的任何密钥(即无用密钥),因此我考虑使用Facebook API提供的值对其进行加密


当用户登录(并向应用程序提供访问令牌)时,应用程序可以通过API请求值,并使用此密码加密/解密其第三方密码。如果用户没有登录到应用程序,任何有权访问服务器的人都无法发出此请求。(这仍然意味着窥探服务器的人可以使用第三方密码登录用户,但一次性访问数据库的人看不到密码。)这是一厢情愿的想法吗?

您不妨使用服务器上的密钥对其进行加密。如果有人访问了你的服务器,他们将拥有检索密钥所需的一切,即使你是从Facebook获得的

我认为您最好将密钥存储在Web服务器不可用但脚本可用的位置。至少要确保您没有将密钥存储在数据库中


除此之外,你所做的一切都将是默默无闻的安全。这里的关键是要确保服务器的安全,这样就不会有人访问它。

我想您只能在客户端上以某种方式存储登录,并从JS中的客户端执行与第三方相关的所有操作

当然,如果你想从服务器上完成这一切,就需要对你的应用程序的体系结构进行一些更改,但这是有可能的,你可以让客户端JS在工作后向你的服务器发送数据,这样你就可以记录与第三方交互的数据

此外,它还具有在客户端上分配负载的优点


我知道你没有用javascript标记这个问题,你似乎想要一个纯服务器的解决方案,但对我来说,这似乎是最好的解决方案。用户保留其数据。

通过模糊保护可能是最好的选择。也许可以实现一个算法,使用标准的东西(比如当前日期时间)生成密钥。您可以将日期存储在数据库中,并使用它使用自己的算法生成密钥。

第三方站点是否不提供OAuth访问?因为这解决了你的大部分问题…不,根本没有API,所以这就是为什么我必须使用urllib来基本上屏蔽刮取和执行登录帖子等。当你登录时,这个网站放了cookie吗?你可以使用这种机制,这样他们只需要在下次cookie过期时再次登录?确实如此,但这仍然需要他们在每次访问时重新输入密码,这是我想避免的事情。我不太确定你的问题是什么。对于处理没有API或OAuth支持的第三方站点,听起来您的计划尽可能合理。至少通过使用Facebook的令牌进行加密,可以有效地使不安全的登录组件依赖于相对安全的登录组件。