我需要有关安全风险和概念证明的信息,以便与本地客户端合作。
在我的选择中,用户将安装两个组件:
启动器一直在作为后台进程运行。启动器提供了WebSocket
服务器。
用户将打开我的网站开始游戏(带有游戏服务器列表和其他设置)。该网站连接到游戏启动器以处理所有操作(更改配置,启动游戏可执行文件)。
问题:
如何实现与网站和游戏启动器的通信?好的,Websockets,是的。但是出于安全原因,浏览器禁止连接到localhost / 127.0.0.1。
作为DNS伪造指针或指向local.game.tld
之类的子域的主机文件是不好的,因为SSL证书在此处可能由于不正确的使用而被撤销。
另一个想法是为浏览器提供NPAPI插件。但是,看来NPAPI已过时,对将来毫无用处。
webpages
与本地安装的software
之间进行通信的最佳实践是什么?
答案 0 :(得分:1)
但是出于安全原因,浏览器禁止连接到localhost / 127.0.0.1
这不是事实。浏览器允许您连接到localhost / 127.0.0.1。我一直在我的机器上这样做。
问题在于TLS(wss://localhost
,而不是ws://localhost
)需要证书,浏览器禁止混合内容(您不能让https
网站加载未加密的资源)。
作为DNS的虚假指针或指向local.game.tld之类的子域的主机文件是错误的,因为SSL证书在此处可能由于不良用法而被吊销。
作为游戏安装程序的一部分,您可以创建一个hosts
证书的mygame.localhost
文件条目(可能使用本地脚本),然后要求玩家使用其证书授权安装证书密码。这样一来,您的证书就不会被撤销...但是您说的对,这是他的最佳选择。
编辑:另外,请注意,域名必须位于结尾,而不是开头(即game.localhost
而不是localhost.game
)。
在网页和本地安装的软件之间进行交流的最佳实践是什么?
通常来说,如果您的游戏安装在本地计算机上,则无需加密本地浏览器与本地计算机之间的通信。
您可以轻松地编写本地服务器以仅接受来自本地计算机的连接(或者,如果需要,最坏的情况是接受来自局域网的连接-尽管这样做会增加安全风险)。
您的网页和WebSocket数据可以在本地服务器和浏览器之间“明文”发送(ws://
和http://
),因为它们都位于同一台计算机上,因此您无需不需要浏览器。当与外部服务(was://
/ https://
)通信时,本地服务器将启动(作为客户端)所需的任何加密连接。
编辑(来自评论):
我只知道两种解决方案:
安装自签名证书;或
使用http
而不是https
,并让服务器像对待客户端一样处理外部流量(因此,对所有外部流量进行加密)。