Sho*_*hon 6 security prolog swi-prolog browser-based localserver
我正在构建一个相对简单的程序来收集和排序用户输入的数据。我想使用通过 Web 浏览器运行的本地服务器有两个原因:
编辑:澄清一下,我的意思是应用程序应该只能从本地网络而不是从 Internet 访问。
当我一直在寻找有关该问题的信息时,我遇到了一两条评论,表明本地服务器有自己的安全风险,但我不清楚这些风险的性质或严重程度。
(如果是相关的,我将使用 SWI-Prolog 来处理数据操作。我还计划为服务器使用SWI-Prolog HTTP 包,但如果结果证明是一个,我愿意重新考虑这个选择馊主意。)
我有两个问题:
我非常感谢任何和所有的帮助!
任何解决方案都存在安全风险。你可以使用经过多年验证的工具,但有一天会被黑客攻击(根据我自己的经验)。而且您可以为安全解决方案支付大量费用而永远不会被黑客攻击。因此,您需要始终将努力与影响进行比较。
基本上,您需要保护您的案例中的 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注入”。研究例子。所有好的网络框架都有“入口”程序来清理所有可能的注入。获取现有代码并用序言重写它。另外,测试所有具有很长字符串、不同字符集等的输入字段。
可以看到,安全并不是那么容易,但是考虑到黑客攻击的影响,你可以选择适当的努力。
另外,请考虑可能的攻击者。如果有人非常感兴趣,特别是想获取您的信息,那么所有提到的方法都很好。但这可能是一种罕见的情况。大多数情况下,黑客只是扫描互联网并尝试对所有找到的服务器应用已知的黑客攻击。在这种情况下,你最好的朋友应该是 Honey-Pots 和 prolog 本身,因为黑客对 swi-prolog 内部结构感兴趣的可能性极低。(黑客需要好好研究服务器代码才能找到门)。
所以我认为您会找到足够的方法来保护所有敏感数据。但请不要将字典单词和相同密码的组合密码用于同一个目的,这是最重要的安全规则。出于同样的原因,您不应授予用户访问所有信息的权限,但保护应该在应用程序级别设计上进行。
本地服务器特有的情况是良好的防火墙、正确的网络设置以及硬盘分区的加密(如果您的本地服务器可能被“黑客”窃取)。
但是,如果您的意思是该应用程序只能从您的本地网络访问,而不是从互联网访问,那么您需要做的工作要少得多,主要是您需要检查您的路由器/防火墙设置和我列表中的第四扇门。
如果您的已知用户数量非常有限,您可以建议他们使用 VPN,而不是像“全球”访问那样保护您的服务器。