【问题标题】:Drop any session from client side从客户端删除任何会话
【发布时间】:2012-07-31 17:44:12
【问题描述】:

我正在准备一些诊断工具。它在 iframe 中的网站上运行 - 仅通过 javascript。

现在我需要删除 iframe 中网站中的会话 cookie。我只需要在执行一些操作后退出。

不幸的是,我不能只从 javascript 中删除会话 cookie,因为它带有 httpOnly 标志。我也没有找到以隐身模式打开 iframe 的任何方法。

现在实现这一点的规则如下:

  • 我可以将任何文件添加到目标网站服务器
  • 我可以在网站域上运行任何 javascript
  • 我可以强制用户使用指定的浏览器(不一定是跨浏览器解决方案)
  • 我不能修改网站代码
  • 解决方案必须独立于服务器和编程语言

对解决方法有什么想法吗?

【问题讨论】:

  • 那么,谁在服务器上创建这些会话?
  • 我的诊断应用程序的用户通过 iframe 使用服务器..
  • 客户端脚本无法删除httpOnly cookie,但浏览器——以及扩展的浏览器插件——可以做到这一点。您不必更改太多代码(Chrome 插件使用 HTML/JS),界面可以更好(没有 iframe,与浏览器集成)并且您可以访问一些强大的功能。你会接受这样的解决方案吗?
  • @ŁukaszW.pl 抱歉,您的回复没有出现在我的警报中,所以我从未见过。 :) 不管怎样,从 Google 的 [Chrome 扩展教程] 开始,然后转到他们的 (developer.chrome.com/extensions/getstarted.html) cookies API sample extension。此外,如果您需要,这里是use jQuery in an extension 的方法。祝你好运!
  • @JordanGray - 好消息是我编写了这个扩展并且效果很好,非常感谢你..

标签: javascript session cookies client-side httponly


【解决方案1】:

唯一的方法是禁用 Cookies

【讨论】:

  • 您是否在其他答案中查看了我的帖子和 cmets?就像我说的那样,我需要 cookie,因为 iframe 中的页面应该可以正常工作,直到我想重置它们...
【解决方案2】:

据我所知-

鉴于此 - 您将拥有一个网站,其中实现了用户登录/注销。

因此,如果您可以通过某种方式让您的诊断应用程序将目标网站的 logout url 作为配置变量或某些设置(通过在服务器中放置一些 js 或文件),那么这项工作可以很简单。只需让您的诊断应用程序在需要时加载该注销 url。

【讨论】:

  • 如果我放弃的话,那就是我的计划 :(
  • 是的,这将是一个简单的、严肃的方法.....只是好奇您为什么将这种方法作为您的最后选择?
  • 我想让它尽可能通用(有时没有简单的注销链接,或者有其他会话信息不能像那样删除)。我也希望用户制作为尽量少配置..
【解决方案3】:

您只是无法通过 javascript 管理 httpOnly cookie。

但是我觉得你要分析页面,还要用js。那么为什么要使用 iframe 呢?

您可以从 html 或 javascript 之外获取要分析的页面内容:

  • 向您的应用程序代理发出 ajax 请求
  • 使用 html5 websockets 作为代理服务器。我假设 websocket 服务器是你的。 Websockets 还具有跨域能力。

然后你只需要解析获取的 DOM(我看到了一些内置的东西)。然后开始分析。

【讨论】:

  • 我需要让用户有可能在页面上进行操作,比如浏览它......在 iframe 中对页面执行操作......而不仅仅是分析它的内容......
  • @ŁukaszW.pl 你可以。将其作为普通代理(即 hidemyass.com)。只需复制该内容并显示它。是这个问题吗?
  • 普通代理不会将页面上的所有链接都转换为目标代理吗?它的处理方式很多......代码中的url,相关脚本中的url......很有可能搞砸一些东西,它必须是可靠的......
  • @ŁukaszW.pl 是的,但你没有。您不想授予匿名访问权限。链接将是原始的。你只需要在它前面加上它的 http url。即:网站:google.com 链接:logo.png 你需要这样做:google.com/logo.png
  • 两个答案真的很棒......你和乔丹关于编写 chrome 扩展的问题,但既然他决定不把它作为答案,那么我会接受你的......我会尝试两种方式,测试他们并选择其中之一..感谢您的帮助..
【解决方案4】:

我认为您将需要某种服务器端代理来记录 cookie 标头值,然后在稍后阶段根据请求中的值重置此标头值。

这不应该用任何语言编写太难,例如在 IIS / .net 框架上,它将是 IHttpModule 的实现。

【讨论】:

  • 我无法访问目标应用程序,因此无法将 HttpModule 放入其中。它也应该是跨平台的 - 我不能为每个网络服务器编写代理..
  • 重定向到相关网站的代理怎么样?
  • 看看我在kewlashu回答中的评论。我不能冒险代理和正常使用网站之间的差异..
  • 好吧,你需要在某个地方运行代码。如果它不是外部代理,那么您必须为每个 Web 服务器编写一个模块。请注意,您可以将 IHttpModule 添加到 IIS 中的任何应用程序,而无需接触应用程序。
【解决方案5】:

拥有 JavaScript,所以只需向您的服务器发出 AJAX 请求并告诉它取消设置会话变量。

【讨论】:

  • 正如我所说的它将是诊断工具,现在我不知道我会在 iframe 中获得什么应用程序,所以我无法确定我应该提出什么请求。更坏的消息是我真的不知道它会是什么平台,所以我无法创建例如我自己的 php 脚本删除会话 cookie。
【解决方案6】:

说 IFrame 引用 url:example.com/iframe.html。

让它引用 cookieless.example.com/iframe.html 并设置一个服务器端反向代理规则设置来获取该请求并将其指向 example.com/iframe.html。

根据您如何设置 cookie 服务器端(即“.example.com”)cookie 将仅在 www 和根域上设置

【讨论】:

  • 但是我会遇到同源策略的问题,因为我需要用js修改iframe内容。另外我也不担心页面和 iframe 上有相同的 cookie...我需要在一些 js 代码序列之间删除会话,以便在下一个序列之前有干净的 cookie 和会话...
  • @ŁukaszW.pl 我认为这是一个好方法。试想……当“cookie 删除器”站点重定向用户时,您的 iframe 地址将更改,您的来源和策略将匹配。我错过了什么?
  • 然后您将返回原始页面中的 cookie。此外,我无法在 iframe 中向应用程序添加子域.. 只需在其服务器上上传一些文件,我不知道它会是什么..
【解决方案7】:

如果您只是想阻止在 iframe 中使用 cookie,您可以尝试使用沙盒属性。

似乎是一个非常相似的问题:

Disable Cookies Inside A Frame/Iframe

希望我能正确理解您的问题。

【讨论】:

  • 好镜头,但沙盒似乎没有将主机站点和 iframe 之间的 cookie 分开......它可以阻止其他操作,但不能阻止这个..
猜你喜欢
  • 2016-07-04
  • 2020-02-07
  • 2011-06-14
  • 2017-04-01
  • 1970-01-01
  • 2017-08-25
  • 2011-07-12
  • 2018-05-09
  • 1970-01-01
相关资源
最近更新 更多