我是Electron的初学者,我在HTML / javascript和窗口桌面应用程序开发(win-forms和WPF)方面拥有丰富的经验。我非常喜欢js / HTML5,我希望有一天能有人在框架中编写js / HTML5来创建桌面应用程序。现在电子就在这里。
据我所知,Atom是使用Electron Framework制作的一款非常棒的产品。我听说它很好,因为它是HACKABLE。好!没问题! 这是否意味着使用Electron框架制作的桌面应用程序是不安全的,任何人都可以对其进行解码并将其用于我的应用程序的用户。
我问这个是因为我要开始开发一个桌面应用程序,并考虑将Electron作为开发选项。
此外,应用程序的打包将在所有三个平台上运行? iOS,Win和Linux?我知道我必须处理我导入的模块,这些模块可以是特定于平台的(例如' auto-updater' )
答案 0 :(得分:12)
电子应用程序的安全性不亚于托管在个人计算机上的任何其他应用程序。如果一个邪恶的个人可以访问您的计算机,那么如果您的应用程序使用的是Electron,WPF或任何其他技术,那么这并不重要。他们可以找到一种方法来对用户使用该应用程序。此外,大多数代码都可以进行逆向工程并利用漏洞。我不认为你必须为此担心。如果像GitHub那样不安全的公司(谁做的话),微软和Slack会避免它。
话虽如此,如果您想尝试隐藏用户的信息电子源代码更容易查看,因为它不是二进制形式。例如,您可以进入Visual Studio Code的app文件夹,该文件夹构建在Electron上并查看/操作源代码。我不确定许可证是否允许,但你可以做到。有一些方法可以缓解这个问题。您可以对JavaScript进行模糊处理,并将其放入ASAR中。
我不确定我完全理解你的最后一个问题。 Electron确实可以在Windows,Mac(OSX而不是iOS)和Linux上运行。假设您拥有正确的模块,可以下载并执行所有三个包。至于安装,Squirrel似乎是一个受欢迎的选择。你需要为每个平台按摩东西。查看Visual Studio Code如何为每个平台执行此操作,我建议您遵循以下规则。
答案 1 :(得分:2)
我建议如果应用程序对信息敏感,或者企业应用程序在另一个“传统”框架中执行。在Electron中,人们可以获得源代码,修改它,甚至可以轻松地重新打包它,因为任何人都可以使用普通的JS文件。我知道大多数人说“你可以混淆它”,但是有很多在线工具可以“美化”代码并找回一些完全相同的东西。此外,一些“混淆器”设法实际破坏了代码。
答案 2 :(得分:2)
安全是一个相对的事情。没有什么是完全安全的。具有安全性的想法是使得难以突破您的安全性,希望它不值得花费时间和精力。这取决于恶意人的动机,这通常取决于正在处理或存储的信息类型或正在执行的服务。您可以将它与锁定前门进行比较。大多数锁都不是很安全,因为经过训练来挑选/绕过它们的人通常很容易这样做。但是他们阻止普通人选择只是出于偶然的诱惑或好奇心而打开你的门。
如果您正在制作的应用程序的性质是它需要尽可能安全,那么在我看来Electron不是您的最佳选择。人们可以直接查看您的代码。即使它被混淆了,仍然会留下javascript代码,正如@ Cenebyte321指出的那样,它可以"美化"有些。虽然正确混淆的代码的美化版本在其所呈现的概念方面不是干净或可读的代码。它不会与原作有任何关系。否则,您可以使用任何正常工作的代码,并通过在其上运行美化器使其可读和组织良好。很高兴认识到,从技术上讲,您可以将任何可执行文件反编译回源代码。即使是用C编写的二进制程序也可以转回C代码。在那种情况下,"混淆了"产生的代码甚至可能是模糊不清的,因此有一些优势。但是,它仍然可以反编译,它应该是有效的C代码。
一旦恶意代码出现在系统上,就很难防范它。更重要的是确保应用程序与之通信的任何服务器都是安全的(同样,在相对意义上),并且它们的API是安全的。它应该足够安全,如果有人查看您的应用程序的源代码,并弄清楚您的服务器的API如何工作,那对您来说没有问题。与服务器的任何敏感通信都应加密。您不希望在源代码中出现一些管理员用户名和密码。但是你不希望任何使用任何语言编写的应用程序。
理想情况下,保存在用户计算机上的任何密码都应该在保存之前以某种方式进行转换(可能以多种方式加盐并进行哈希处理,或者这些天酷孩子正在做的事情),以便有人获得访问权限对于那些数据,他们只看到了它的修改版本。如果正确完成,不应该有解密密码的方法,尽管人们可以使用这些技术来尝试生成一个导致相同哈希的密码。您只应将正常输入密码的更改版本与保存的实际密码更改版本进行比较。安全存储密码并具有安全API和与服务器通信的原则并非特定于Electron,您使用的任何语言或框架都需要仔细考虑安全性。
为了防止我的言论产生误导,我并不是说本地存储用于访问服务器的密码是标准做法。理想情况下,用户必须在每个会话中键入该性质的密码,并且永远不会在本地存储。但为方便起见,许多应用程序允许您在本地存储密码,因此您不必每次都输入密码。实际上,这取决于这些密码访问的数据的敏感程度以及方便用户的重要性。
但是,如果恶意软件在您的用户的计算机上运行,它可能会记录他们的击键,并以这种方式识别用户名和密码。即使加密通信也不是万无一失的,因为最终会在其中发现安全漏洞,并且开发了更新的协议。有时候政府或其他人都知道故意设计成一种加密类型的后门。只是希望没有其他人找到这些后门,因为它们本质上是故意设计到加密协议中的安全漏洞。随着javascript工具变得更加先进,混淆的javascript代码可能几乎像混淆的C代码一样模糊和混乱,或者可能已经有工具可以实现这一点。
答案 3 :(得分:0)