我习惯于将用户上传的文件处理到同一服务器上,并将自己的文件传输到远程服务器上。但不能将用户上传的文件传输到远程服务器。
我正在寻找在这方面选择传输协议的最佳(行业)实践。
我的应用程序在Linux服务器上运行Django,文件在Windows服务器上运行。
我选择哪种协议,只要它是安全的(FTPS,SFTP,HTTPS)都没关系吗?还是在性能/安全性方面,特别是在用户上传文件方面,一个优于另一个?
请不要链接到解释协议差异的问题,我特别是在用户上传文件的情况下询问。
答案 0 :(得分:2)
只要您选择提供(相互)身份验证,加密和消息身份验证的标准协议,就安全性而言并没有太大区别。如果所有这些都是由您选择的协议中的TLS层提供的(就像您的所有示例一样),那么您就不会在设计级别上犯大错(但是实现是关键,许多安全漏洞是实现的错误,而不是设计缺陷)。但是,出于不同目的,这些协议在支持的算法列表中可能有所不同。
在性能方面,可能会有很大的不同,这取决于您要优化的内容。如果选择HTTPS,则将无法长时间保持连接打开,并且很可能必须承担每个传输文件的身份验证和所有内容的整个连接设置的开销。 (嗯,实际上您可以保持https连接处于打开状态,但这对于此类文件上传来说是完全自定义的实现。)选择FTPS / SFTP您将能够保持连接打开并传输任意数量的文件,但是可能必须具有更复杂的错误处理逻辑(有时,连接会在底层套接字不了解一段时间的情况下终止,依此类推)。简而言之,我认为HTTPS更具弹性,但对于许多小文件,安全FTP的性能更高。
这也是一个体系结构问题,通过使用HTTPS,您将能够在应用程序代码中实现所有这些功能,而类似FTP的东西则意味着依赖于外部组件,这从操作的角度来看可能很重要(请考虑一下。有关如何将其实际部署以及是否已经有一个devops功能来管理适当的操作)。
最终,这只是您必须做出的设计决定,以上只是一些我不知道所有情况而想到的事情,也根本没有考虑的全面清单。