php - 一次登录多个网站的脚本。 CURL 和 PHP 都试过了。

标签 php curl authentication

我经营一个面向小学生(3-14 岁)的计算机实验室,我想创建一个由多个 iframe 组成的桌面/仪表板页面,每个 iframe 指向不同的外部网站 (为此我们为每个 child 创建了个人账户);当一个 child 登录(到仪表板)时,一个脚本会让她登录到这些网站,所以她不必这样做。

我有 1 个服务器和 20 个工作站,我将它们分别称为“我的服务器”和“我的浏览器”。所有这些都在同一个路由器(动态 IP)之后。

一个 child 进入“mybrowser”工作站,启动 Firefox 并运行 desktop.php(托管在“myserver”中)并获得登录屏幕(“myserver”)

'我的浏览器' ---http---> '我的服务器'

登录后,“myserver”将检索存储在其数据库中的一组用户名和密码,并运行一个 CURL 脚本将它们发送到“外部网络服务器”。

'mybrowser' ---http---> 'myserver' ---curl---> '外部网络服务器'

成功了,好吧,我想。 结果是 CURL 在“myserver”上运行,登录“myserver”而不是“mybrowser”。 刷新后,iframe 中的 session 仍未登录。现在我知道了。

然后我想到从'myserver'捕获cookie并将其设置到'mybrowser'以便'mybrowser'现在可以浏览(在iframe中) 作为登录用户。毕竟,我们(所有“我的浏览器”)都在与“我的服务器”相同的路由器后面,因此 IP 地址相同。

换句话说,我只需要“我的服务器”即可让用户同时登录多个外部网站,完成后将控制权交还给各个用户的浏览器。

我希望答案不会诉诸于使用 CURL 来显示和控制整个 session 的外部网站,除了拖累会导致其他一些棘手的问题。

我了解到由于安全问题不允许这样做的细微差别,但是如果所有“mybrowsers”和“myserver”都在同一个路由器后面怎么办?假设有一种方法可以将登录 cookie 从“我的服务器”复制到“我的浏览器”,“外部网络服务器”会知道请求来自不同的机器吗?

这能做到吗? 谢谢。

最佳答案

您遇到的问题与cookies的安全原则有关。您不能为其他域设置 cookie,这意味着 myserver 不能为 facebook.com 设置 cookie。

您可以将您的服务器设置为运行 HTTP 代理并使所有查询都通过您的服务器运行并进行某种 URL 转换(例如 facebook.com => facebook.myserver),然后作为返回允许您设置为客户提供 cookie(因为你在 facebook.myserver 上运行),然后翻译你从客户那里收到的 cookie,并将它们提供给第三方网站。

您可以从一个非透明代理示例开始:http://www.phpmyproxy.com/

透明代理(其中 URL 保持“正确”/未翻译)可能也值得考虑。 Squid是一个很受欢迎的。不过,不能说这会有多容易。

毕竟你仍然需要为 myserver 构建一个本地脚本来处理登录过程,但至少代理应该使这一切成为可能。

如果您对登录过程本身有任何发言权,那么将所有服务设置为使用 OpenID 或类似的登录服务可能会更容易,StackOverflow 及其姊妹站点就是一个很好的例子,说明在多个站点上登录是多么容易实现了。

关于php - 一次登录多个网站的脚本。 CURL 和 PHP 都试过了。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734860/

相关文章:

curl - 来自专用服务器的 HTTPS 网站的 wget

linux - cookie 是如何工作的

cordova - 在 PhoneGap 中使用 Googleplus 签名

macos - 如何以编程方式在 macOS 上验证用户和密码?

php - MySQL:可以根据每条记录参数进行分组的 SELECT 条件语句吗?

php - 在客户订单历史记录中显示最后的 WooCommerce 管理员订单备注

php - 未捕获的 SoapFault 异常 : [WSDL] SOAP-ERROR: Parsing WSDL Couldn't load from 'http://88. XXX.XXX.XXX:8080/

php - 使用映射图像填充表单中的文本框

php - 仅为一个接口(interface)配置 openvpn 客户端

asp.net - 在 SignOut() 之后使用浏览器的后退按钮允许访问安全页面 (ASP.NET MVC)