使用本地服务器为程序提供基于浏览器的图形用户界面会带来哪些安全风险?

7
我正在构建一个相对简单的程序来收集和排序用户输入的数据。我想使用通过Web浏览器运行的本地服务器,有两个原因:
  1. HTML表单是收集所需输入的简单有效的方式。
  2. 我希望能够离线运行程序,而不必管理访问远程服务器涉及的安全风险。
编辑: 为了澄清,我的意思是该应用程序只能从本地网络访问,而不能从互联网访问
当我在寻找相关信息时,我遇到了一两条评论,其中提到本地服务器也存在安全风险,但我不清楚这些风险的性质或严重程度。
(如果相关,我将使用SWI-Prolog处理数据操作。我还计划使用SWI-Prolog HTTP package进行服务器,但如果证明是个坏主意,我愿意重新考虑这个选择。)
我有两个问题:
  1. 在使用本地服务器时,需要注意哪些安全风险?(注:在我的情况下,该程序可能涉及一些非常敏感的信息,因此在这个问题上我没有容忍任何懈怠)。
  2. 如何减轻这些风险?(或者说,我应该去哪里学习如何解决这个问题?)

非常感谢您的帮助!


1
如果您仅有少量已知用户,则可以忽略我回答的最大部分。只需建议他使用VPN即可。这样,您的服务器将无法被外界访问,但拥有密码的用户将能够连接到您的本地网络并使用您的服务器。 - Sergei Lodyagin
3个回答

3
任何解决方案都存在安全风险。你可以使用经过多年验证的工具,但仍有可能被黑客攻击(根据我的经验)。而你也可以花费大量资金购买安全解决方案,却永远不会被攻击。因此,你需要始终比较努力和影响。
基本上,你需要保护你的情况下的4个“门”: 1. 授权(密码拦截或例如不正确使用cookie) 2. http协议 3. 应用程序输入 4. 访问数据库的其他方式(例如不使用http,通过具有弱密码的ssh端口,获取计算机或硬盘等。在某些情况下,你需要适当加密卷)
1和4不是特定于Prolog的,但在本地服务器的情况下,4是唯一具有特定性的。
保护http协议级别意味着不允许可以控制你的swi-prolog服务器的请求。出于这个目的,我建议安装一些反向代理,如nginx,它可以防止在这个级别上的攻击,包括某些类型的DoS。因此,浏览器将联系nginx,如果是正确的http请求,则nginx将重定向请求到您的服务器。如果它具有类似功能,则可以使用任何其他服务器代替nginx。
你需要安装适当的ssl密钥,并在反向代理服务器中允许ssl(https)。它不应该在你的swi-prolog服务器中。Https将加密所有信息,并通过http与swi-prolog通信。
考虑授权。有些方法很容易被破解。你需要学习这个主题,有很多信息。我认为这是最重要的部分。
应用程序输入问题 - 著名的例子是“SQL注入”。学习一下例子。所有好的Web框架都有“entry”过程来清除所有可能的注入。使用现有代码并使用Prolog重新编写它。此外,请测试所有输入字段,包括非常长的字符串、不同的字符集等。
你可以看到,安全性并不容易,但你可以选择适当的努力,考虑黑客攻击的影响。
另外,请考虑可能的攻击者。如果有人特别感兴趣获取你的信息,则所有提到的方法都很好。但这可能是一个罕见的情况。大多数黑客只会扫描互联网,并尝试对所有发现的服务器应用已知的黑客攻击。在这种情况下,你最好的朋友应该是Honey-Pots和Prolog本身,因为黑客对swi-prolog内部的兴趣概率极低。(黑客需要仔细研究服务器代码才能找到一个门)。
因此,我认为你会找到适当的方法来保护所有敏感数据。但请不要使用字典单词组合密码,并且同一个密码不能用于多个目的,这是安全的最重要规则。出于同样的原因,你不应该让用户访问所有信息,而应该在应用程序级别设计保护。
对于本地服务器特定的情况,良好的防火墙、适当的网络设置和加密硬盘分区(如果你的本地服务器可能被“黑客”盗取)都是必要的。
但是,如果你的意思是应用程序只能从你的本地网络访问而不能从互联网访问,则需要更少的努力,主要需要检查路由器/防火墙设置和我的列表

如果你只有很少的已知用户,你可以建议他们使用VPN来访问,而不需要像“全球”访问那样保护你的服务器。


非常感谢您慷慨、详尽的回答!这对我识别我在这些安全问题的基本概念方面存在的许多空缺非常有帮助。我相信,有了这个方向,我现在可以开始探索您列出的各种领域。我还学到了一个东西,那就是我知道的比我想象中的还要少;因为我确实意味着该应用程序只能在本地网络上的单台机器上访问(也许分发Prolog应用程序供其他人使用),但我甚至不知道足够清楚地表达出来! - Shon
你后来的补充让我松了一口气。当我第一次阅读你的回答时,我觉得自己完全不在行,准备放弃整个方法,或者尝试构建本地GUI。非常感谢! - Shon

2
我想指出,我的帖子是关于使用端口转发在apache中访问prolog服务器时存在安全问题的。我知道SWI-Prolog http框架网站上曾经发生过成功的prolog注入DOS攻击。我不认为网站的作者希望这些细节被公开,但这种可能性确实是存在的。显然,只有在网站评估图灵完备代码(或无法证明其终止的代码)时,才可能存在这种攻击向量。一个简单的安全预防措施是检查请求对象并拒绝来自除本地主机以外的请求。我想指出,pldoc服务器默认只响应本地主机的请求。- Anne Ogborn

1
我认为SWI_Prolog http包是一个很好的选择。Jan Wielemaker花了很多心血来确保其安全和可扩展性。
我不认为您需要担心SQL注入问题,当您可以使用Prolog强大功能时,依赖SQL会显得很奇怪...
当然,您需要适当地管理服务器上的http访问... 今天早上在SWI-Prolog邮件列表中有一篇有趣的帖子与此话题相关:Anne Ogborn分享了她的经验...

很高兴听到对SWI-Prolog软件包的认可。我很喜欢使用它,但在这些问题上我相当无知,知道我不是在做傻事真是太好了。我花了很多时间研究Anne Ogborn的教程,并感谢她的工作。感谢您提供邮件列表的链接!除了警示性的故事之外,看到她利用这种情况很有趣。 - Shon
但是我们需要担心“Prolog注入”问题。 顺便问一下,您建议使用哪种替代SQL数据库进行持久存储? - Sergei Lodyagin
@SergeiLodyagin: Prolog是一种关系语言。而SWI-Prolog有很多存储方案可供选择。例如,我尝试过使用QLF - Wordnet(约300K条记录)在玩具电脑上可以在几秒钟内加载。但SWI-Prolog的重点是RDF存储。 - CapelliC
1
@SergeiLodyagin,除非您直接将未转义的用户输入插入目标并调用它,否则您不会受到Prolog注入的影响。虽然我严重怀疑有人会尝试这样做。我们已经足够小众了。此外,您可以继续使用ODBC包中的SQL。我已经成功地通过这种方式从SWI查询Postgres。 - Daniel Lyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接