【问题标题】:Populate form in iframe of external website在外部网站的 iframe 中填充表单
【发布时间】:2012-03-30 13:42:52
【问题描述】:

我正在尝试编写一个 php 页面,该页面将在不同的 iframe 中加载几个不同的网站。其中一些网站需要用户登录。我需要做的基本上是允许用户只输入一次用户名和密码,然后填充所有其他表单(基本上使用相同的用户密码对登录)

现在我知道,由于这些是外部站点,因此您无权访问 DOM,并且不允许使用 XSS,但我想知道是否还有其他方法可以实现这一点。

实际上有人建议我模拟按键并拥有一个基本上可以从一个字段到另一个字段并基本上输入用户名并通过的javascript,但是在做了一些研究之后我认为这是不可能的,因为你只能模拟事件而不是实际的按键所以...还有其他建议吗?

注意:我也检查了this,但就我而言,同意其他网站/域不是一个选项!

谢谢——迈克

【问题讨论】:

  • 你可以用 JQuery 做到这一点。输入用户名和密码后,甚至可以发布表单。
  • 是的,浏览器安全性阻止了这一点是有原因的:你正在尝试做的是真的阴暗的。例如,如果这可行,一个网站可以悄悄地向其他网站提交表单请求(例如更新登录的 Facebook 帐户中的时间线)。

标签: php javascript forms iframe login


【解决方案1】:

这取决于。

如果这些网站共享一个域(父窗口和 iframe),那么顶部窗口就有可能与子 iframe 进行通信。 AJAX 防止跨域(包括跨子域),但 iframe 可以进行通信,只要它们属于同一个顶级域。

https://stackoverflow.com/a/9338955/575527https://stackoverflow.com/a/9676156/575527

更好的方法是拥有一个“顶级域 cookie”,该 cookie 在所有这些 iframe 中都可见(假设它们属于同一个顶级域)。使用单个登录页面登录一次,然后页面中的后续请求将需要检查 cookie 与会话(如果该用户已登录)。

或者如果这些页面具有不同的域但访问相同的数据库,那么可以将会话 ID 作为 url 参数而不是作为 cookie 传递给 iframe。然后 iframe 中的网站将解析会话 ID 并检查数据库中这些会话是否有效、最新且已登录。

所有这些都需要额外的 CSRF 和 XSS 检查,因为会话 ID 是公开的。

【讨论】:

    【解决方案2】:

    你不能做你在 JavaScript 中描述的事情。

    但是,根据用户登录后您需要对数据/网站执行的操作,您可以使用远程 POST 来模拟该行为。请参阅this question 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2011-05-19
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多