【问题标题】:Improve the usability of 3rd party application提高 3rd 方应用程序的可用性
【发布时间】:2017-09-20 03:27:38
【问题描述】:

我们使用的第 3 方应用程序引起了很多问题,因为用户在单击 Launch 按钮之前没有单击 Register 按钮,或者如果他们先单击 Register,此详细信息页面与RegisterLaunch 按钮都会刷新并转到他们的投资组合。然后,他们必须在他们的投资组合列表中重新找到该项目。

我认为第 3 方应用程序是一个 .NET,并且使用了 knockout.js,并且不允许嵌入到 Frames 中。

有哪些选项可以为用户提供指导或在理想情况下减少此过程的痛苦?

我希望提供一个内部网页,只需单击一次按钮即可发送RequestLaunch 操作。我发布了一个较早的问题Knockout data-bind click,但无法得到一些工作。

在 SO 上似乎有很多类似的问题,但我不确定这些问题/答案是否用于自动单击自包含应用程序上的按钮,因为如果来自 3rd 方应用程序之外,我想这样做(我什至可以访问他们的视图模型?)。此应用会阻止将其嵌入到 Frames 中。

  • Auto-click button element on page load using jQuery
  • How to auto click button in knockout js

  • 目前我有一个来自内部网站的链接,可以并排打开两个浏览器窗口。一个人带着指示去第三方和第二个窗口。这没关系,但我们发现人们不想阅读。我真的希望单击一个按钮,或者至少能够从内部网页一次发送一个请求。或者,如果可能的话,可能会在他们的网站上添加兜风类型的指南。

这是第 3 方按钮代码

    <a class="btn btn-large btn-blue" href="javascript:void(0);" 
    data-bind="click: $root.clickAction.bind($data, ActionType)">
    <span data-bind="text: Title">Register</span></a>

【问题讨论】:

  • 我担心你不走运,因为你试图操纵的第 3 方页面可以保护自己不被嵌入,并且可能是在不同的域上。虽然您尝试做的事情对您的用户有帮助,但它依赖于与第 3 方应用程序中的帧破坏代码所保护的相同点击劫持技术。 hacksplaining.com/exercises/click-jacking
  • 您能以某种方式包含js 吗? (通过html模板等)
  • 遗憾的是,我相信这是使用 3rd 方应用程序的本质;您可能会从不从头开始做这件事中获得时间,但您会处理这些限制和限制,或者陷入为定制支付费用的成本漏斗中。 Hacky / messy JS 触及代码,在短期内可能看起来不错,但从长远来看最终会让你付出更多。我建议您拆卸和重建到您不依赖此第三方的程度。
  • @PhilCollins 正是我的感受。我希望高层管理人员能达成一致。我们有能力在内部做,但他们总是坚持使用 COTS。然后我们最终支付数千美元进行定制,因为它不能满足我们的需求,或者我们只是将不同的流程塞给员工,以符合这个基于 COTS 云的应用程序如何为他们的所有客户工作。

标签: javascript html security user-interface knockout.js


【解决方案1】:

您基本上想破解 3rd 方应用程序,但您控制环境,所以这听起来并非不可能。 (我不会谈论我是否认为这是一个好主意,我只会列出你可能有的几个选项。)

删除 X-Frame-Options 标头

您是说第 3 方应用程序不允许嵌入框架中。这是由响应标头完成的,很可能是X-Frame-Options(也可以是Content-Security-Policy: frame-ancestors,但实际上并不重要)。您所要做的就是删除该标题,瞧,应用程序可以在框架中加载。

要删除标头,您需要某种代理。如果应用程序是在纯 http 上提供的,那真的很容易,任何类型的 http 代理都可以删除相应的响应标头。如果它是在 https 上提供的,您必须做一些事情才能使其真正工作(创建一个证书颁发机构,将根证书添加到客户端作为受信任的根,使用代理连接到应用程序,除了删除标头之外,替换您自己的 https 证书,然后您的客户端将信任该证书)。

请注意,这会削弱第 3 方应用的安全性,使其容易受到类似于clickjacking 的攻击(以及pixel perfect timing 等所有与帧相关的攻击)。

通过代理注入自定义脚本(编辑:稍后添加

使用上述代理,您无需删除X-Frame-Options。最好将您自己的 javascript 注入到 3rd 方应用程序页面中,因为它可以完全访问应用程序 DOM,因此可以在原始页面上做任何您想做的事情。例如,它可以改变行为以便点击相应的按钮。 :) 如果我无法在客户端上安装浏览器扩展程序,我会这样做(见下文)。

使用自定义客户端

除了将浏览器用作客户端之外,您还可以创建一个自定义客户端,在实践中充当浏览器,但忽略上述标头。这也可以轻松完成您想要的点击。缺点是您的用户必须启动自定义客户端而不是使用他们的浏览器来使用应用程序。在拥有 Xamarin 和 WKWebView 之类的移动环境中,这可能更容易实现。

浏览器扩展

自定义浏览器想法的一个更简单且可能更可行的变体是浏览器扩展。它可以在应用程序 url 上激活,并且可以很容易地在适当的页面上进行您想要的点击(浏览器扩展可以请求对页面的完全访问,而不管标题如何)。您只需在客户端上安装一次扩展。如果必须,我可能会这样做。

【讨论】:

  • 谢谢。有趣的东西,不幸的是没有一个对我来说是可行的选择。
  • 我仍然会为可能的未来读者编辑我的答案,因为我在代理方面有了更好的想法。 :) 如果您因为无法控制环境(代理和浏览器)而无法做到这些,那么恐怕您想要实现的目标是不可能的(那么攻击者也有可能,这据我所知并非如此)。
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多