【问题标题】:Pass HTTP session for third party site from server to client将第三方站点的 HTTP 会话从服务器传递到客户端
【发布时间】:2016-09-26 21:56:31
【问题描述】:

假设我的网络应用代表向我的应用提供凭据的用户执行操作,以便该应用可以对第三方服务进行 API 调用。顺便说一句,这是为了向这个第三方网站发布产品报价(有点像 eBay,但规模较小)。

现在,让发布变得简单的一种超级方便的方法是重用复杂的网络表单,第三方服务必须为经过身份验证的用户接受产品报价。这个想法是填充他们的 Web 表单并将客户端浏览器重定向到它,以便用户可以使用复杂且熟悉的 Web 表单在那里编辑内容。这将是最好的用户体验和最少的实施工作。

但是,这不是一个记录在案的方法。更重要的是,它不能以简单的方式工作,例如从请求参数(GET 或 POST)填充表单字段。网络表单不能那样工作。

可能还有其他选择。我的应用程序可以代表用户打开与第三方应用程序的会话,提交所有数据以便将其存储在他们的数据库中,然后向用户的浏览器发送它需要接管我的服务器应用程序在他的服务器上打开的会话所需的所有数据代表。请注意,我还没有尝试过;而且我认为如果第三方应用程序将会话与 IP 号码相关联(无论是否声音,应用程序可能会这样做),它可能会失败。

但是是否有可能让打开 HTTP 会话的服务器程序将接管该会话所需的所有信息写入 HTML/Javascript 文档,并将该文档发送到用户的浏览器,在其中执行和组装 Javascript直接在第三方表单上使用浏览器时编写的请求,我一直在使用 HttpFox 观察?

所有信息,即一切HTTP;显然不可能将服务器的 IP 号传递给客户端......但是所有的 cookie 和参数。然后,在浏览器中执行的 Javascript 将不得不使用我以某种方式在文档中传递的信息(可能在脚本部分)来编写对第三方网站的请求,该请求直接进入服务器应用程序打开的会话.这意味着来自我的域的文档将设置 cookie(添加请求标头),然后让用户的浏览器执行该请求。

也就是说,从技术上讲,是否可以将会话从服务器传递到客户端?

你会如何在 Javascript 中做到这一点?

更新

根据answers to another question: You cannot set cookies for another domain. Allowing this would present an enormous security flaw. 表明我不是前端开发人员。

还没有放弃。有XmlHttpRequest 对象。也许这可以被滥用于我的邪恶目的?

第二次更新

所以我尝试了XmlHttpRequest。坏消息(对我和这个特殊情况):使用XmlHttpRequest 似乎也不起作用,因为(使用当前的 Firefox)我精心伪造的请求被重写为似乎将成为W3C standard on Cross-Origin Resource Sharing 的内容,所以Cookie 标头被简单地删除,虚拟标头MoinGurke 减少为Access-Control-Request-Headers: gurke,moin。现在坦率地说,这正在破坏游戏大时代。我很失望。

【问题讨论】:

  • OAuth 解决了这个问题。如果“ebay like site”支持 OAuth,那么您就有了解决方案。否则这是不可能的,除非“ebay like site”上存在安全漏洞

标签: javascript http session cookies session-hijacking


【解决方案1】:

好吧,放弃。我想做的事情是不可能的。这样做的原因是所谓的同源策略,以使浏览器更安全。请参阅this other answer 获取一些提示。看来我对 W3C 关于跨源资源共享的工作草案的评估是错误的,该草案允许同源政策的例外情况。因此,如果这被广泛实施,它可能是可行的。但总的来说,这次尝试有太多的假设和不确定性。

呵呵。得到它的工作。 :)

毕竟,其中包含的 cookie 和会话 ID 是不需要的。我已经弄清楚如何获取该请求所需的所有参数,并通过向客户发送自动提交表单将它们提供给客户:

<body onload="document.forms[0].submit()">
<form action="..." method="post">
...

然后客户端进入他自己的会话。效果很好。只要他们不改变界面。我设置了测试来监控他们的表单并提醒我采取行动,他们以不兼容的方式改变了东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    相关资源
    最近更新 更多