没有用户名/密码的 Gmail/Facebook - PHP 登录标题问题

Posted

技术标签:

【中文标题】没有用户名/密码的 Gmail/Facebook - PHP 登录标题问题【英文标题】:Gmail/Facebook without username/password - PHP Login Header Problem 【发布时间】:2010-12-26 03:22:58 【问题描述】:

我想在 Gmail/Facebook/任何其他网站中创建自己的个人登录网关。在这个网关中,我输入我的主用户名和密码,然后我可以选择登录位置(gmail/facebook/etc)而不输入这些用户名,因为它们存储在服务器上。

我尝试通过使用 cURL 发送带有标题的 POST 请求并发布在常规登录期间在 Firefox 中发送的数据来实现这一点。但是,这不适用于 facebook 或 gmail。

有没有人尝试过或者知道为什么这不起作用?

谢谢。

// 已编辑 我认为它不起作用的问题在于,将 curl 请求发送到 gmail 的 php 服务器的 IP 地址与我的浏览器不同,因此,当来自 gmail 服务器的响应反馈到浏览器时,它仍然无法进行身份验证。

或者是我使用curl发送到Gmail服务器的cookie实际上是根据时间变化的。

【问题讨论】:

你如何确定“它不起作用”?既然你没有得到预期的结果,会发生什么?您如何处理从远程服务器获得的响应? 你想要的结果是什么?您是否尝试在登录页面后自动在浏览器中登录 gmail 和 facebook 来实现这一点?如果是这样,那么 cURL 不是正确的方法,因为您登录的是服务器而不是浏览器... 谢谢大卫 我的意思是发送到 gmail 服务器的请求标头没有验证我的登录身份。 gmail服务器给出的响应直接反馈给浏览器。 谢谢 Jan,我想做你所描述的。原因是我想只用一组用户/密码登录,这样我就可以忘记我经常使用的所有网络服务的用户名和密码。 【参考方案1】:

这不一定可行,Gmail 和 Facebook 可能会做非常简单的检查来查看推荐人是谁以及它何时来自您的网站,而不是他们自己的登录页面拒绝登录。这是基本的安全检查。

您需要查看他们的 api 以查看您是否可以做任何事情,或者您可以使用 javascript 和 firefox 插件将您的用户名和密码写入网络表单,然后提交表单,有点破解但可能做你想做的事。

【讨论】:

感谢您的回复。我理解你的选择。但是,我真正想做的是,我想在不从任何计算机输入真实用户名/密码的情况下登录 Gmail。此外,我相信登录 Gmail/Facebook 的基本方法是发送适当的请求标头并发布数据。我觉得还是可行的?【参考方案2】:

您尝试的 cURL 方法没有理由无法使用正确的标头。在 digg.com 之类的抓取网站上玩耍,我发现我需要一个有效的 USER AGENT 标头,当然还有一个适当的 REFERER URL,如果总体上对您最有效,请继续使用 curl 技术。在 Firefox 中使用 http 标头插件来查看您发送到 gmail 的标头,然后完全伪造它们。

【讨论】:

感谢您的回复。问题是请求标头是由 PHP 发送的,我只能在 Firefox 上看到响应请求。响应实际上来自要求我登录的登录页面,因为我发送的标题不正确。所以有点难以理解为什么这不起作用。 我的意思是使用 FF 正常登录一次以查看请求和响应,复制并尝试在 cURL 中模拟这些标头 谢谢,这就是我所做的。我从 ff 的 LiveHttpHeader 插件复制了请求标头,但是这组标头似乎没有使事情正确。我被卡住了:(【参考方案3】:

尝试使用 firebug 找出响应返回的内容,它应该始终为您提供最佳线索。

我看不出它为什么不起作用,我用 Curl 阅读了我的 Gmail 和分析。

【讨论】:

感谢您的回复。问题是请求标头是由 PHP 发送的,我只能在 Firefox 上看到响应请求。请问是否需要发送特殊的标头?我怀疑可能是浏览器在 php 发送请求后错过了一些要发送的 cookie? 你应该检查这个资源:askapache.com/webmaster/login-google-analytics.html 应该是一个很好的领导【参考方案4】:

您是否已将 curl 配置为接受和存储 cookie?通常,一旦您通过在线服务的身份验证,它就会以 cookie 的形式向您发送一个安全令牌,您可以在随后的每个请求中发回该令牌以验证您的授权。

【讨论】:

【参考方案5】:

根据您对我的评论的回复,cURL 对您的问题毫无用处。您需要使用您的服务(gmail、facebook、...)验证您的浏览器,您现在正在做的是验证您的脚本(或您的服务器)。

你必须使用 JavaScript 来完成你想要的。如果您将服务凭据存储在服务器上,则在成功登录网页后将其发送回客户端。然后,您可以创建一个隐藏的 iframe,并将“src”属性设置为所选服务的登录页面。 iframe 加载后,您可以将登录信息(用户名/密码)填写到相应的字段中并提交表单。完成后,您应该登录到您的服务。 可能还有其他一些技术,但这是第一个浮现在脑海中的技术......

【讨论】:

所以你的意思是以下内容不起作用:首先使用我的用户/密码登录到我的脚本,一旦我的脚本检查此信息,然后它使用 curl 向 Gmail 发送 POST 请求存储用户/传递并将响应标头和数据传递回浏览器?是不是因为post请求是从服务器而不是浏览器发送的? 不,它不会工作。浏览器必须创建请求才能获得正确的 cookie,并且您不能为其他域创建 cookie。 感谢您的回复。所以关键在于 cookie 的域特定属性。 我不确定您所说的“cookie 的域特定属性”是什么意思 意味着 cookie 是特定于域的,仅在设置的域上有效

以上是关于没有用户名/密码的 Gmail/Facebook - PHP 登录标题问题的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 长时间运行 - 获得所需输出的替代方法

设计没有密码确认的更新用户密码

电脑用户名默认密码是多少

没有密码的 AWS Cognito 用户池

LDAP绑定为没有密码的用户?

如何使用 iText 将没有所有者密码的仅用户密码添加到 PDF