【问题标题】:What security risks are posed by using a local server to provide a browser-based gui for a program?使用本地服务器为程序提供基于浏览器的 gui 会带来哪些安全风险?
【发布时间】:2013-10-08 03:22:51
【问题描述】:

我正在构建一个相对简单的程序来收集和排序用户输入的数据。我想使用通过网络浏览器运行的本地服务器有两个原因:

  1. HTML 表单是收集我需要的输入的一种简单而有效的方法。
  2. 我希望能够离线运行程序,而不必管理访问远程服务器所涉及的安全风险。

编辑:澄清一下,我的意思是应用程序应该只能从本地网络访问,而不能从互联网访问

在我一直在寻找有关该问题的信息时,我遇到了一两个评论,暗示本地服务器存在自身的安全风险,但我不清楚这些风险的性质或严重程度。

(如果相关,我将使用 SWI-Prolog 来处理数据操作。我还计划将 SWI-Prolog HTTP package 用于服务器,但如果事实证明是,我愿意重新考虑这个选择一个坏主意。)

我有两个问题:

  1. 在使用本地服务器时需要注意哪些安全风险? (注意:就我而言,该程序可能会处理一些非常敏感的信息,所以我在这个问题上没有任何松懈的余地。
  2. 如何降低这些风险? (或者,我应该去哪里学习如何解决这个问题?)

我非常感谢任何和所有的帮助!

【问题讨论】:

  • 如果您的已知用户数量有限,您可以忽略我回答的大部分内容。只是建议他使用VPN。世界将无法访问您的服务器,但具有密码的用户将能够连接到您的本地网络并使用您的服务器。

标签: security prolog swi-prolog localserver browser-based


【解决方案1】:

任何解决方案都存在安全风险。您可以使用经过多年验证的工具,总有一天会被黑客入侵(根据我自己的经验)。而且您可以为安全解决方案付出很多,而且永远不会被黑客入侵。因此,您需要始终将努力与影响进行比较。

基本上,您需要保护 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 框架都有“入口”程序来清除所有可能的注入。获取现有代码并用 prolog 重写它。 此外,用很长的字符串、不同的字符集等测试所有输入字段。

您可以看到,安全性并不那么容易,但是您可以考虑到黑客攻击的影响,选择适当的努力。

另外,想想可能的攻击者。如果有人对获取您的信息非常感兴趣,那么所有提到的方法都很好。但这可能是一种罕见的情况。大多数情况下,黑客只是扫描互联网并尝试将已知的黑客应用于所有找到的服务器。在这种情况下,你最好的朋友应该是 Honey-Pots 和 prolog 本身,因为黑客对 swi-prolog 内部结构感兴趣的可能性极低。 (黑客需要研究好服务器代码才能找到一扇门)。

所以我认为您会找到足够的方法来保护所有敏感数据。 但是请不要将密码与字典单词的组合和相同的密码用于一个目的,这是最重要的安全规则。出于同样的原因,您不应授予用户访问所有信息的权限,但应在应用级别设计上进行保护。

如果您的本地服务器可能被“黑客”窃取,则本地服务器的特定情况是良好的防火墙、正确的网络设置和硬盘分区的加密。

但是,如果您的意思是应用程序只能从您的本地网络访问,而不能从 Internet 访问,那么您需要的工作要少得多,主要是您需要检查您的路由器/防火墙设置以及我列表中的第四扇门.

如果您的已知用户数量非常有限,您可以建议他们使用 VPN,而不是像“全局”访问那样保护您的服务器。

【讨论】:

  • 非常感谢您非常的慷慨、详细的回答!这对我试图找出在我理解这些安全问题所涉及的基本概念方面存在的许多漏洞很有帮助。我相信,有了这个方向,我现在可以开始探索您列出的各个领域。我还了解到,我知道的比我想象的还要少;因为 我确实的意思是该应用程序只能在本地网络中访问——在一台机器上——(也许将 Prolog 应用程序分发给其他人以同样使用),但我什至没有知道足够清楚地表达这一点!
  • 您后来的添加是一个很大的解脱;因为当我第一次阅读您的答案时,我认为我完全不符合我的要求,我即将放弃整个方法,也许最终会尝试构建一个原生 gui。非常感谢!
【解决方案2】:

我要指出我的帖子是关于在 apache 中使用端口转发的安全问题 访问序言服务器。

而且我确实知道对基于 SWI-Prolog http 框架的网站的成功的 prolog 注入 DOS 攻击。我不相信该网站的作者希望公开细节,但这种可能性肯定是真实的。 显然,这种攻击向量只有在网站评估图灵完整代码(或无法证明将终止的代码)时才有可能。

一个简单的安全预防措施是检查 Request 对象并拒绝来自 localhost 之外的任何请求。

我要指出的是,pldoc 服务器默认情况下只在 localhost 上响应。 - 安妮·奥格伯恩

【讨论】:

    【解决方案3】:

    我认为 SWI_Prolog http 包是一个很好的选择。 Jan Wielemaker 为确保其安全性和可扩展性付出了很多努力。

    我认为您不必担心 SQL 注入,当您拥有 Prolog 功能时,依赖 SQL 确实会很奇怪......

    当然,您需要在您的服务器中正确管理 http 访问... 就在今天早上,SWI-Prolog 邮件列表中出现了an interesting post,关于这个话题:Anne Ogborn 分享了她的经验......

    【讨论】:

    • 我很高兴听到对 SWI-Prolog 包的认可。我很喜欢玩它,但我对这些事情一无所知,很高兴知道我不是在做傻事。我花了很多时间阅读 Anne Ogborn 的教程,并对她的工作表示感谢。感谢邮件列表的链接!除了警示故事之外,看到她利用这种情况很有趣。
    • 但我们需要担心“Prolog 注入”。顺便问一下,您建议将哪种 SQL DB 替代方案用于持久存储?
    • @SergeiLodyagin:Prolog 是一种关系语言。 SWI-Prolog 有很多存储选择。例如,我尝试使用 QLF - Wordnet(约 300K 记录 IIRC)可以在几秒钟内加载到玩具电脑上。但 SWI-Prolog 的重点是 RDF 存储。
    • @SergeiLodyagin 除非您直接将未转义的用户输入插入目标然后调用它,否则您不会受到 Prolog 注入的影响。我严重怀疑有人会尝试它。我们已经足够小众了。此外,您可以继续将 SQL 与 ODBC 包一起使用。通过这种方式,我已经成功地从 SWI 查询 Postgres。
    猜你喜欢
    • 2011-05-06
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2017-11-09
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多