我正在开发一个应用程序项目,该应用程序允许Android使用PHP API远程连接到MySQL数据库。
用户已要求应用程序支持我一直在研究的SSH隧道,但我对此有一些担忧。
应用程序的工作原理是我的Web服务器上运行的API(用户可以选择在自己的服务器上安装,但大部分都没有),因此Android会向PHP API发送帖子,然后PHP直接连接到在android发布消息中发送的MySQL主机,这一切都正常。
但是,如果我想支持SSH隧道,我的理解是我的Android应用程序仍会发布到我的PHP API,但是指示打开SSH隧道,例如将本地端口3307转发到端口上的远程主机example.com 3306.然后,PHP将通过端口3307上的127.0.0.1连接到MySQL。
这很好,除非另一个用户然后决定在另一个用户正在进行隧道的同时使用端口3307,第二个用户会发生冲突,因为第一个用户已经打开了3307,因此他们需要选择一个新端口。
我认为那时最好的解决办法就是API有一个套接字池,它可以使用并选择一个免费的套接字通过本地端口通过android发送的指定远程端口连接。例如。例如,API将选择本地端口5000并转发到3306.
我担心的是,虽然这样可行,但两个用户可能会同时发出请求,并且API会选择相同的端口号作为本地端口,例如: 5000,因为这个端口在技术上是免费的,但是一个用户将成功连接,第二个用户最终将连接到第一个用户服务器,并且希望无法进行身份验证,但仍然存在潜在的风险。
我是否认为这是正确的方法,或者是否有更好的方法,或者如果用户从自己的网络服务器而不是我的网络服务器运行API,我应该只支持SSH隧道选项,这样就没有风险与另一个不相关的用户发生冲突。