【问题标题】:Intercepting network calls to force Html header referer to null拦截网络调用以强制 Html 标头引用为 null
【发布时间】:2014-03-18 19:55:28
【问题描述】:

我一直在我的 AIR 2.7 项目中使用 Flex“HTML”组件。它是 HtmlLoader 类的包装器。

问题是 HTML 标头中的空引用自动设置为“app://[appname].swf”。这不是标准的,因为默认的引用行为应该是根本不设置任何引用。结果是我在使用 iframe 的某些网站上被拒绝访问(因为 iframe 的位置更改设置了一个空的引用)。

我无法控制这些请求在更改 iframe 的源时没有触发任何事件。

我已经考虑过在发送消息之前拦截所有网络调用并在必要时将referer设置为空的可能性。我的应用程序只是一个容器,其中加载了一个模块以便于更新,所以也许我可以在上面设置一个代理或类似的东西。

Flex中有什么办法可以拦截网络消息??

编辑:

在与 Adob​​e 员工交谈后,我在 Adob​​e Bug Base 中打开了一个关于此的错误:https://bugbase.adobe.com/index.cfm?event=bug&id=2945647

从我的 cmets 中提取的更多信息:

我已经尝试(使用 Charles 代理)模拟特定站点的一些案例。当发送一个空白或有效的引用来加载一些 swf 文件时,它通过了。但是,它拒绝对无效 (ex: app://) 的访问。这证实了引荐来源网址问题。

没有关于什么是有效或无效的正式规范。我指的是我正在测试的网站的期望。例如,cdn.nitrome.com/games/rubbletroubletokyo/rubbletroubletokyo.swf 有这样的引荐来源检查,将返回“拒绝访问”。如果请求发送时带有它认为无效的引荐来源网址,例如 app://foo.swf 甚至 http://www.google.com。如果没有发送引荐来源网址或与应该调用 swf 文件的页面一起发送正确的文件(在这种情况下为 http://www.nitrome.com/games/rubbletroubletokyo)。

该应用程序适用于儿童,并包含一个网络浏览器。只允许授权网站(父母或出版商),www.nitrome.com 将在发布时成为其中之一。当然,我必须确保发布时计划的一切都能正常工作!我已经成功地为nitrome.com 创建了一个hack,但它真的很具体。我们必须为遇到问题的每个网站创建 hack,这……嗯,耗时且难以维护

【问题讨论】:

    标签: apache-flex actionscript-3 air


    【解决方案1】:

    由于没有办法弄乱引荐来源网址,因此我们必须针对遇到问题的每个网站实施特定的黑客攻击(如果它是可入侵的,当然可以)。

    这是我为 www.nitrome.com 游戏所做的。

    游戏页面的工作方式如下:在 iframe 中加载 sfw 广告,当广告完成(或用户单击跳过)时,它会更改 iframe 内容以加载游戏 swf。

    由于引用者而失败,但我可以在代码中(使用计时器...)找出正在更改的内容,找到游戏 swf 路径(正则表达式)并将框架 contentWindow.location 强制为 swf 路径.

    正如我所说,它是一种 hack,而且非常具体,但效果却出奇的好。

    【讨论】:

      【解决方案2】:

      您不能从 Flex 应用程序更改 HTTP_Referer 值。 [source]。引用:

      “很遗憾,无法从 AIR 应用程序更改 HTTP Referer”

      提出了另一种选择,它涉及设置custom sandbox 的种类;但是关于这是否有效,这个线程是开放的。

      发帖人似乎对推荐人价值的价值也有类似的沮丧。我想知道是否有任何支持声称这是非标准的“推荐人行为”。我很惊讶任何网页工作都失败了,因为指定了引荐来源网址值。

      【讨论】:

      • 我知道,事实上这是我自己的问题!自定义沙箱并不是一个真正可行的选择,这就是我寻找其他东西的原因。是的,尽管依赖引用者不是一个好主意,但某些页面确实可以在 Flex 应用程序中正确加载并且无法正确加载。
      • 根据我有限的研究,似乎 'app://' 语法对于 AIR 来说是不寻常的/独特的。但是,referer 值不为空的原因有很多;比如你从其他地方来到“SiteB”。我在 Flextras 网站上进行推荐人跟踪,以查看新访问者来自哪里[以及他们是否注册];这些值中有一半不是空白的。我希望任何依赖于引用为空白的网页要么实现不正确,要么试图实现一些安全机制来阻止用户查看页面。
      • 是的,这也是我的猜测。我已经尝试(使用 Charles 代理)模拟特定站点的一些案例。当发送一个空白或有效的引用来加载一些 swf 文件时,它通过了。但是,它拒绝访问无效(例如:app://)
      • @Exort 您一直在 http_referer 值中引用“有效”和“无效”值。你有什么使一个有效/无效的推荐人的来源吗?这类事情有正式的规范吗?
      • 不,没有正式的规范,我指的是我正在测试的网站所期望的。例如,cdn.nitrome.com/games/rubbletroubletokyo/rubbletroubletokyo.swf 具有这样的引荐来源网址检查,并将返回“拒绝访问”。如果请求已与 IT 认为无效的推荐人一起发送,则页面,例如 app://foo.swf 甚至 google.com。如果没有发送引荐来源网址或应该调用 swf 文件的页面(在这种情况下为nitrome.com/games/rubbletroubletokyo),它会发送正确的文件。编辑:StackOverflow 自动删除了链接上的所有 http://
      【解决方案3】:

      这段代码对我有用,我检查了 fidller 中的标题。 有时,如果从 htmlLoader 内部发生一些重定向,你会得到一个类似 "http://adobe.com/applolo 的引用,我认为这与使用 window.location 的一些 javascript 重定向有关,但我不确定,对于这种情况,你需要在 JS 中使用一些钩子来防止这个或解决方法。

      var urlReq:URLRequest=new URLRequest(urlInput.text);
      var headers:URLRequestHeader=new URLRequestHeader("Referer","test");
      urlReq.requestHeaders=[];
      urlReq.requestHeaders.push(headers);
      browser.htmlLoader.load(urlReq);
      

      在代码浏览器中是一个 HTML 对象

      【讨论】:

        猜你喜欢
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        • 2014-02-04
        • 2013-07-04
        • 1970-01-01
        • 2015-04-03
        • 1970-01-01
        相关资源
        最近更新 更多