0

我来自网络和操作系统操作,而不是开发背景。我有一些编写 Python 和 PHP 代码的经验,并在大学学习过软件开发。作为一个爱好项目(目前),我正计划建立一个小型网站,其中将包含一个组件来存储 PII 和敏感信息。我必须优先考虑安全性,其次是性能(主要是加密/解密)。

我的目标是尽可能加密所有内容,并让代码尽可能少(默认情况下)用于利用。该站点将托管在 linux 系统上。

该项目的整个想法是深入学习一门语言(尽可能多地),我觉得如果我选择一些我喜欢的想法,我会更加专注。这个想法涉及处理 PII 和其他敏感信息。而且,如果最终产品结果很好,那么就会打开它,因此在选择编写代码的语言时要做出一个好的选择。

我做了一些阅读,看到有人提到后端 c/c++ 会很好,因为它提供了良好的性能和灵活性,但安全性并不容易。下一个最佳选择是 Ada 2012,因为它提供了比 C/C++ 更高的安全性,并且不会影响性能。Java 也可以提供安全性,但速度可能会稍慢一些。然后是 Python/Ruby。

我认为 Ada 2012 可能是一个不错的选择,但我不想进入一个我在某种程度上学习它的位置,然后意识到我会更好地使用 Python 或 Java 或其他一些语言。

我想从专家那里知道这三个具体问题的答案:

哪种语言最适合开发这个网站,这样:

  • 可以使用最好的加密/解密库吗?
  • 可以利用该语言的特性来编写本质上安全的代码吗?
  • 另外,性能越多越好吗?

请指教。此外,如果有人使用 Ada 进行过网站(特别是那些处理 PII 的)开发,请分享您的经验。

我知道每种语言都有优点和缺点,我查询的目的是从那些作为网站开发人员多年的经验中学习,并使用多种语言和框架来开发处理敏感数据的网站。如果模组认为这个问题会引发一场好与坏的语言战争,我很抱歉,因为这不是本意,我将关闭这个问题。

4

2 回答 2

2

可以利用该语言的特性来编写本质上安全的代码吗?Ada 的类型系统支持编写在使用前验证数据的代码。这是有助于 IT 安全性的语言功能。但当然,IT 安全远不止这些。配置防火墙,例如使用 systemd 指定操作系统允许同时运行多少个可执行文件的进程,每个进程允许分配多少内存,不同应用程序可以访问哪些目录和权限等等。我确信在这个简短的回复中有很多我没有提及或涵盖的内容。

可以使用最好的加密/解密库吗?据我所知,最好的密码学库是 Ada-Crypto-Library:https ://github.com/cforler/Ada-Crypto-Library 。但是需要的是制作一个安全的 Web 应用程序。为了加密安全套接字层(https),我知道的任何 http 服务器实现中都没有使用 Ada-Crypto-Library。如果想在 Ada 中开发 Web 应用程序,我看到了三个选项: AdaCore 的 AWS(Ada Web 服务器),它包含在 GNAT 编译器 (www.adacore.com) 的社区版中,http 服务器实现在 Dmitry Kazakov 的简单组件中(http://www.dmitry-kazakov.de/ada/components.htm) 或在 Dmitry Kazakov 的 Simple Componenets 之上实现的 GNOGA (www.gnoga.com)。哦,等等,Matreshka 也可以使用,但我还没有使用它,所以我无法评论(http://forge.ada-ru.org/matreshka)。

根据 AWS 的文档,它可以编译为使用 OpenSSL、LibreSSL 或 GNUTLS ( http://docs.adacore.com/live/wave/aws/html/aws_ug/building_aws.html#requirements )。

使用简单组件和 GNOGA,安全套接层实现由 GNUTLS 提供。

为 Web 应用程序提供 SSL 的另一种选择是使用 Apache Web 服务器作为处理加密的代理(我从未做过这样的设置,只听说存在这种可能性)。

另外,性能越多越好吗?我喜欢性能,如何获得最佳性能是一个广阔的课题。总的来说,我认为对于那些喜欢性能的人来说,Ada 是不错的编程语言选择。在我的脑海中,为了最大限度地提高使用 Ada 的性能,应该:

1) 当使用标准容器和使用 GNAT 编译器时,可以使用“pragma Suppress (Tampering_Checks);” 以提高应用程序的性能。不是每个人都同意这种观点,即在打开篡改检查的情况下进行一个调试构建,然后在关闭检查的情况下进行一个发布构建,因为以安全换取性能,但它对性能有显着影响。标准容器的替代方案可以使用基于 Ada-Trait 的容器 ( https://github.com/AdaCore/ada-traits-containers )。它们可能是世界上为 Ada 编程语言设计的最好的容器。

2) 避免在标准库中使用 Unbounded_String。可以使用 GNATColl 库中的 XString 无界字符串实现来代替,并且可以将性能提高 10 倍。如果可能,还考虑在内存池(或子池)中分配普通字符串(我已经在存储库的 Xml_Parser 应用程序中完成了该操作:https ://github.com/joakim-strandberg/wayland_ada_binding )

编辑:我故意避免争论 Ada、Java 或 Python 是否更好,而是专注于,如果你想在 Ada 中做,你需要做什么和考虑。

于 2018-07-19T19:05:48.467 回答
-1

简短的回答 - 不,这样的系统永远不可能。PII 不如核计划敏感。

长答案——

1.可以使用最好的加密/解密库吗? - 当您的问题提到加密伴随着解密时,SHA-1 已损坏,现在检查替代方案(https://www.forbes.com/sites/forbestechcouncil/2017/04/13/sha-1-encryption-has-been- broken-now-what/#35e33f317ee7),如果你想深入挖掘,这与库无关,而是关于用于工作的算法。任何加密迟早都会被破坏。

2. 可以利用该语言的特性来编写本质上安全的代码吗? 没有什么可以像安全语言或语言特性那样来拯救你,很少有基于某些安全原则的框架;只需遵循一组实践来确保代码安全。你跟着他们,如果你不这样做,你会很安全,可能会有麻烦,并且有大约 5000 个免费工具(非官方数量)可以在网站上运行来破解它。你愿意针对这么多数量测试你的系统吗?工具 ?

3.另外,性能越多越好吗? - 加密和安全性越强,你失去的性能就越多,所以选择你的跑步机。

安全是一个非常模糊和广泛的术语,即使是雅虎和赛门铁克这样的公司,每个人都会被黑客入侵。(https://gizmodo.com/researchers-made-a-clever-tool-to-detect-hacks-companie-1821293404)仍然不相信这里是最先进的 - https://en.wikipedia.org/wiki/Stuxnet但即使这是 20 年的历史,只有 500 KB 的威胁。

我的 2 美分 - 当我们处理 0 和 1 时,请在安全性和性能方面定义明确的目标,制作 poc(概念证明)并运行一些基准测试。

于 2018-07-21T21:01:14.443 回答