安全灵活的跨域会话

2024-04-30

我有一个问题希望你能帮忙解决。假设我在一家名为“Blammo”的假设公司工作,我们有一个名为“Log”的假设产品。我正在尝试建立一个系统,人们可以登录 logfromblammo.com 并订购我们的一些产品,然后当他们准备好购买时,前往 checkout.blammo.com 支付订单费用。最终,我希望允许 Blammo 通过自己的网站推出一个新的假设产品:rockfromblammo.com,并且让该网站也能够与 checkout.blammo.com 共享会话,以便用户可以在这两种产品中拥有一个购物车网站。

当然,上述假设场景并不是我公司的实际运作方式,但它是我需要做的事情的一个很好的例子。我们有一个现有的用户数据库,并且我们有方法对任何网站上的任何用户进行身份验证,但我的目标是允许用户从一个网站无缝地跨越到另一个网站,而无需重新进行身份验证。这也将使我们能够将购物车等数据无缝传输到结帐站点。

我(简要地)研究了 OpenID 等解决方案,但我需要能够将我们拥有的任何解决方案与我们现有的身份验证方法集成,这不是非常强大。有没有什么好的方法可以单独通过 PHP 来做到这一点?


您可以做的是在站点之间创建“交叉”链接以继续会话。

最简单的方法是通过查询字符串传递会话 ID;例如

http://whateverblammo.com/?sessid=XXYYZZ

在您开始认为任何人都可以捕获该信息之前,请考虑一下您的 cookie 是如何传输的;假设您没有使用 SSL,那么对于窃听网络的人来说没有太大区别。

这并不意味着它是安全的;其一,用户可能会意外地复制/粘贴地址栏,从而泄露他们的会话。为了限制这种暴露,您可以在收到会话 ID 后立即重定向到没有会话 ID 的页面。

请注意,使用mcrypt()在会话 id 上没有多大帮助,因为问题不是值的可见性;会话劫持不关心底层值,只关心 url 的可重复性。

你必须确保该id只能使用一次;这可以通过创建一个跟踪使用计数的会话变量来完成:

$_SESSION['extids'] = array();

$ext = md5(uniqid(mt_rand(), true)); // just a semi random diddy
$_SESSION['extids'][$ext] = 1;

$link = 'http://othersite/?' . http_build_query('sessid' => session_id() . '-' . $ext);

收到时:

list($sid, $ext) = explode('-', $_GET['sessid']);
session_id($sid);
session_start();
if (isset($_SESSION['extids'][$ext])) {
    // okay, make sure it can't be used again
    unset($_SESSION['extids'][$ext]);
}

你需要这些链接每次跨越了边界,因为自上次以来会话可能已重新生成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全灵活的跨域会话 的相关文章

  • Laravel 5.1 中的VerifyCsrfToken.php 第 53 行:(Firefox 浏览器)中出现 TokenMismatchException?

    我试图找出为什么会出现这个错误 即使它是全新安装的 我在我的项目中遇到了这个错误 所以我用谷歌搜索 没有一个答案对我有用 所以我创建了新项目并复制了所有控制器 视图和模型 几个小时后工作正常 再次出现令牌不匹配错误 为什么在 laravel
  • Magento - 将特定父类别的子类别列为链接

    我是 php 的初学者 并且一直试图将一个父类别的子类别作为链接调用 我得到了这个 它调出了 getName 但 getUrl 根本没有返回任何 URL 输出代码只是 li a href name of sub a li
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • 将函数中的会话变量传递给 codeigniter 中的助手

    这就是我正在尝试做的事情 这是控制器中的功能 public function get started if test login this gt session gt all userdata this gt load gt view te
  • PHP 中的 Preg_replace

    我想替换 中包含的字符串中的内容content 它是多行等 preg replace 函数应该删除整个 com 没有垫子 蒙特 尝试这个 result preg replace s replacement content subject
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将

随机推荐

  • 更改 ggsurvplot 的 x 轴标签

    library survival library survminer 我正在使用 survminer 包来绘制未经调整的 Kaplan Meier 图 我正在计算比较不同暴露的死亡率 我有一个非常具体的问题 有没有办法改变ggsurvplo
  • 使用 HTML / CSS / JavaScript 隐藏 YouTube 视频控件(标题、稍后观看、分享)

    我正在我的网站中嵌入 Youtube 每日动态视频 我不希望 Youtube 视频控件在我的网站上可见 请查看附件 我想删除顶部的控件 以红色突出显示 并且还想删除底部的控件 以红色突出显示 以前可以在 YouTube 视频中使用 show
  • 如何将 SVG 元素下载为 SVG 文件

    在过去的几个月里 我一直在编写处理椭球地球的代码 最近我已经完成了它 我的教授现在希望我将我制作的图表的图片作为 SVG 文件发送给他 我知道在Python中你可以在你的项目中放入几行代码来让它下载图像 但我不确定它是如何工作的JavaSc
  • Rails 3.2.2 mysql2 适配器错误

    我在让 mysql2 适配器与最新版本的 Rails 一起工作时遇到了麻烦 我刚刚生成了一个新项目 将以下内容添加到我的 gemfile 中 gem mysql2 lt 0 3 7 然后当然跑了 bundle install 我还修改了我的
  • 如何防止 iOS 独立 Web 应用程序锁定设备?

    我的原型设计服务创建独立的 不可安装的 iOS Web 应用程序 有时他们会在使用时锁定设备 主页按钮停止工作 应用程序继续工作 以下内容在设备的控制台中重复显示 通过附加到 xcode 检索 Apr 25 14 34 57 SpringB
  • Delphi 2009之前如何处理UTF-8和ANSI转换?

    在 Delphi 2009 中 我们有 RichEdit1 Lines LoadFromFile OpenDialog1 FileName TEncoding UTF8 RichEdit1 Lines SaveToFile OpenDial
  • C 可变参数函数:如何指定给 va_arg 的类型

    在像 printf 这样的函数中 我们使用stdarg h处理可变参数 void print int args va list ap va start ap args int i 0 for i 0 i
  • 使用 php 使用 Google Drive 进行断点续传

    我正在尝试使用以下文档在 php 中使用 Google Drive 进行可恢复上传 https developers google com drive v3 web manage uploads resumable https develo
  • Cordova 错误:您的 ios 平台没有 Api.js

    我正在尝试构建一个 cordova ios 应用程序 但运气不佳并且出现奇怪的错误 将此版本的 Cordova 与旧版本的 cordova ios 一起使用是 已弃用 升级到 电子邮件受保护 cdn cgi l email protecti
  • Puppet - 在迭代哈希时,如果 hiera 中不存在,则在清单中设置默认值

    我正在迭代 hiera 哈希中的许多条目 并希望通过在清单中设置默认值 例如ensure groups managehome等 并且如果 hiera 中存在重复的键 值对 则覆盖默认值 到目前为止 我尝试过的所有方法都无法获得默认值 我知道
  • c:forEach 在单个表行中显示所有内容

    目前我正在做一个项目 我需要在数据库的列中显示信息 但由于某种原因它们显示在一行中 现在显示如下 我还附上了我的 jsp 页面中的代码 table border 1 cellspacing 0 cellpadding 3 style fon
  • 主线程检查器:在后台线程上调用 UI API iOS 11 Xcode 9 GM Seed

    任何人都可以帮助我调试这个问题 从我开始使用 Xcode 9 GM 种子和 iOS 11 GM 种子开始 我的代码在控制台中向我发出警告 2017 09 18 16 22 52 872716 0530 359 20158 reports M
  • Jenkins + Cmake + JIRA = 多个相互依赖项目的 CI?

    我们的系统中有许多小项目在 Linux 上运行 Slackware 7 11 正在慢慢迁移到 RHEL 6 0 大约 50 100 个应用程序和 15 20 个库 我们几乎所有的应用程序都使用我们的一个或多个库 我们的源树看起来像这样 ap
  • Vuex - “不要在突变处理程序之外改变 vuex 存储状态”

    我正在尝试从 Firestore 初始化我的 Vuex 商店 最后一行代码context commit SET ACTIVITIES acts 是什么造成了错误 我不认为我会直接改变状态 因为我正在使用一个动作 我可能会错过什么 这是我的
  • Sonatype Nexus 3 - 记录 URL 代理请求

    我正在尝试调试代理存储库的问题 为我知道被代理的存储库中存在的工件提供 404 在我的情况下这是一个 NPM 包 我想启用日志记录 以便可以看到 Nexus 在响应该代理请求时尝试访问的 URL 但似乎找不到任何提供此输出的默认记录器 我需
  • 在 JavaScript 中检查数组是否包含 null 以外的内容?

    我有一个数组 很可能总是这样 null null null null null 有时这个数组可能会变成这样 helloworld null null null null 我知道我可以使用 for 循环 但是有没有办法使用indexOf检查数
  • AddExtension 属性在 C# 2.0 中如何工作?

    我想打开一个保存文件对话框 让用户输入文件名 如果他们忘记了 csv 扩展名 请添加它 SaveFileDialog AddExtension 属性似乎可以工作 但事实并非如此 我什至将 DefaultExt 属性设置为 csv 但仍然没有
  • 使用正则表达式验证姓名

    我正在尝试编写一个正则表达式name and surname 它们由一个或多个只能由字母组成的单词组成 我不关心首字母大写字母 I 想匹配名字和姓氏 Names Antony de Home April antony de Home Apr
  • 为每一表行创建一个 json

    我想从表中的数据创建 json 表格看起来像这样 code D5ABX0 MKT536 WAEX44 我正在使用 FOR JSON PATH 这很好 SELECT code FROM feature FOR JSON PATH 但是这个查询
  • 安全灵活的跨域会话

    我有一个问题希望你能帮忙解决 假设我在一家名为 Blammo 的假设公司工作 我们有一个名为 Log 的假设产品 我正在尝试建立一个系统 人们可以登录 logfromblammo com 并订购我们的一些产品 然后当他们准备好购买时 前往