首页 > 解决方案 > 替代自定义协议(URI 方案)

问题描述

我一直在我们所有的内部应用程序上广泛使用自定义协议来打开任何类型的文档(CAD、CAM、PDF 等),打开文件资源管理器并选择特定文件,以及运行其他应用程序。

几年前,我定义了一个myprotocol协议,它执行C:\Windows\System32\wscript.exe传递我的 VBScript 的名称和每个请求具有的任何参数。传递给脚本的第一个参数描述动作的类型(OpenDocumentShowFileInFileExplorerExportBOM等),以下参数传递给动作。

直到去年wscript.exe停止工作时,一切都运行良好(有关详细信息,请参见此处)。我通过将其复制到wscript2.exe. 创建副本现在是我们所有计算机标准配置中的一个步骤,使用wscript2.exe现在是我们自定义协议的官方配置。(我们的防病毒客户支持找不到任何与 交互的东西wscript.exe)。

今天,在构建了一台新计算机后,我们发现:

去年我已经解决了一个问题,现在我正在处理另一个问题,阅读那篇文章让我感到害怕,让我认为很快就会出现更多问题。

那么问题来了:有没有使用自定义协议的替代方案?

我不是在开发供公众使用的网络应用程序。我的自定义协议需要 VBScript 文件、脚本使用的应用程序和大量网络共享文件夹。它们仅在我们的内部网络中使用,并且使用它们的计算机是手动配置的。

标签: wshurl-scheme

解决方案


首先,即使它只在内部网络上,那也是非常危险的。除非计算机/用户/浏览器被锁定在 Internet 之外,否则有人可能会猜测或找出您的协议名称,将链接发送给您公司中的某人并造成很多麻烦(也可能造成损失)。

反正...

由于您正在控制所有计算机上的软件,因此您可以在每台计算机上添加一个迷你服务器,只监听 localhost,它只是调用您的脚本。然后定义host likesecret.myprotocol指向该服务器,例如localhost:1234。

只是为了稍微减少潜在问题,本地服务器将仅使用 HTTPS,并使用适当的证书、HSTSHPKP设置为很长时间(由于您控制软件,您可以在需要时刷新它们)。最后两个,以防万一有人尝试设置相同的域,并且无论出于何种原因,主机覆盖不起作用并且用户最终调用了敌对服务器。

因此,链接必须从 更改myprotocol://whateverhttps://secret.myprotocol/whatever

它确实引入了新的攻击面(“迷你服务器”),但应该很容易实现,以最小化该面的大小:)。“迷你服务器”甚至不必是真正的 www 服务器,一个可以侦听套接字和调用的简单脚本就可以了wscript.exe(除非您需要向它传递更多信息)。真实服务器有更多可能有错误的代码,但也允许添加更多内容,例如“通过”页面,显示信息“在 3 秒内打开文档 X...”和“取消”按钮。它还可能需要某种会话登录(只是为了确保请求操作的是用户,而不是其他)。


推荐阅读