在 Electron Framework 中制作的应用程序不安全?
Application made in Electron Framework are insecure?
我是 Electron 的初学者,我在 HTML/javascript 和 window 桌面应用程序开发(win-forms 和 WPF)方面有丰富的经验。我非常喜欢 js/HTML5,以至于我希望有一天有人能想出一个框架,我可以在其中编写 js/HTML5 来创建桌面应用程序。现在 Electron 来了。
据我所知,Atom 是一款使用 Electron Framework 制作的很棒的产品。我听说它很好,因为它是 HACKABLE。好的!没问题!
这是否意味着使用 Electron 框架制作的桌面应用程序不安全,任何人都可以对其进行解码并针对我的应用程序的用户使用它。
我问这个是因为我要开始开发桌面应用程序并考虑使用 Electron 进行开发。
此外,应用程序的打包将 运行 在所有三个平台中? iOS、赢和Linux?我知道我必须照顾我导入的模块,这些模块可以是特定于平台的(例如'auto-updater')
Electron 应用程序的安全性不亚于个人计算机上托管的任何其他应用程序。如果一个不怀好意的人获得了对您计算机的访问权限,那么您的应用程序是使用 Electron、WPF 还是任何其他技术都无关紧要。他们可以找到一种方法来对用户使用该应用程序。此外,大多数代码都可以进行逆向工程并利用漏洞。我认为你不必为此担心。如果像 GitHub(谁制造了它)、Microsoft 和 Slack 这样不安全的公司会避免它。
也就是说,如果您想尝试向用户隐藏信息,Electron 源代码更容易查看,因为它不是二进制形式。例如,您可以进入 Visual Studio 基于 Electron 构建的代码和 view/manipulate 源代码的应用程序文件夹。我不确定许可证是否允许,但你可以这样做。您可以通过多种方式缓解这种情况。您可以混淆 JavaScript 并将其放入 ASAR 等。
我不确定我是否完全理解你的最后一个问题。 Electron 在 Windows、Mac(OSX 而不是 iOS)和 Linux 上确实 运行。假设您拥有正确的模块,则可以在所有三个上下载并执行一个包。至于安装,Squirrel 似乎是一个受欢迎的选择。您将需要为每个平台调整内容。查看 Visual Studio 代码如何针对每个平台执行此操作,我建议您效仿。
我建议,如果应用程序是信息敏感的或企业应用程序,则在另一个 "traditional" 框架中执行。在 Electron 中,可以轻松获得源代码、修改它甚至重新打包它,因为使用该应用程序的任何人都可以使用纯 JS 文件。我知道大多数人都说 "you can obfuscate it",但是有很多在线工具可以 "beautify" 代码并取回非常相同的东西。还有一些 "obfuscators" 设法破解了密码。
安全是相对的。没有什么是完全安全的。安全的想法是让突破你的安全变得足够困难,希望它不值得花费时间和精力。这取决于恶意人员的动机,这通常取决于正在处理或存储的信息类型或正在执行的服务。您可以将其比作在前门上锁。大多数锁都不是很安全,因为受过 pick/bypass 训练的人通常可以很容易地做到这一点。但是他们阻止了普通人仅仅出于偶然的诱惑或好奇而选择打开你的门。
如果程序代码编写得当,那么即使黑客可以查看代码,它也应该是安全的。如果不是这样,所有开源软件都将不安全,因为其他人可以看到代码。但是,如果您正在制作的应用程序的性质是它需要尽可能安全,那么您可以更上一层楼,通过避免人们查看代码来使其更加安全,以防万一给了他们如何利用它的想法。如果那是你想要的,那么在我看来 Electron 不是你最好的选择。人们可以直接查看您的代码。即使它被混淆了,仍然会留下 JavaScript 代码,正如 @Cenebyte321 指出的那样,它可以在某种程度上“美化”。尽管经过适当混淆的代码的美化版本就其所呈现的概念而言不会是干净或可读的代码。它不会接近原始版本。否则,您可以使用任何工作代码,并通过 运行 对其进行美化,使其具有可读性和组织性。很高兴认识到,从技术上讲,您可以将任何可执行文件反编译回源代码。即使是用 C 编写的二进制程序也可以转换回 C 代码。在那种情况下,生成的“混淆”代码可能甚至是晦涩难懂的,所以这样做有一些好处。但是,它仍然可以被反编译,而且它应该是有效的 C 代码。永远不应依赖隐藏或混淆代码来确保安全。充其量,它可以在您的实际安全之外增加一层困难。或者,将您的代码开源并邀请人们审核您的代码并报告漏洞也是一个不错的策略。
一旦恶意代码进入系统,就很难防范。更重要的是确保应用程序与之通信的任何服务器都是安全的(同样,在相对意义上)并且对它们的 API 是安全的。它应该足够安全,如果有人查看您应用程序的源代码,并弄清楚您服务器的 API 是如何工作的,那对您来说没有问题。与服务器的任何敏感通信都应加密。您不希望源代码中存在一些管理员用户名和密码。但是你不希望用任何语言编写的任何应用程序都这样。
理想情况下,保存在用户计算机上的任何密码在保存之前都应该以某种方式进行转换(可能以多种方式加盐和散列,或者现在酷孩子们正在做的任何事情),这样如果有人获得了访问权限数据,他们只能看到它的修改版本。正确完成此操作后,应该没有办法解密密码,尽管人们可以使用一些技术来尝试生成将产生相同散列值的密码。您应该只将正常输入密码的更改版本与实际密码的已保存更改版本进行比较。安全存储密码和安全 APIs 以及与服务器通信的原则并不特定于 Electron,您使用的任何语言或框架都需要同样仔细考虑安全性。
为了防止我的话产生误导,我并不是在暗示在本地存储用于访问服务器的密码是标准做法。理想情况下,用户每次会话都必须输入这种性质的密码,而且它永远不会存储在本地。但为方便起见,某些应用程序确实允许您在本地存储密码,因此您不必每次都输入密码。实际上,这取决于通过这些密码访问的数据的敏感程度以及便利性对您的用户的重要性。一个常见的中间立场是不要求用户每次都再次输入密码,但这可能并不意味着密码实际上存储在本地。
但如果恶意软件 运行 在您用户的计算机上,它可能无论如何都会记录他们的击键并以此方式辨别用户名和密码。即使是加密通信也不是万无一失的,因为最终会在其中发现安全漏洞,并开发出更新的协议。有时政府或其他人知道有意设计成一种加密类型的后门。只是希望其他人还没有发现那些后门,因为它们确实存在本质上是故意设计到加密协议中的安全漏洞。随着 JavaScript 工具变得越来越先进,经过混淆的 JavaScript 代码可能几乎与经过混淆的 C 代码一样晦涩难懂,或者可能已经有工具可以实现这一点。
是的,用 electron 构建的 Off-course 桌面应用程序不太安全,除非像我这样的人沉迷于调试它。最近 yahoo messenger 更新到新版本,内置了一个电子原子。并重新编译它并更改了图标。
为我想要的图标重新编译雅虎通:
yahoo新编译与重编译的对比:
我是 Electron 的初学者,我在 HTML/javascript 和 window 桌面应用程序开发(win-forms 和 WPF)方面有丰富的经验。我非常喜欢 js/HTML5,以至于我希望有一天有人能想出一个框架,我可以在其中编写 js/HTML5 来创建桌面应用程序。现在 Electron 来了。
据我所知,Atom 是一款使用 Electron Framework 制作的很棒的产品。我听说它很好,因为它是 HACKABLE。好的!没问题! 这是否意味着使用 Electron 框架制作的桌面应用程序不安全,任何人都可以对其进行解码并针对我的应用程序的用户使用它。
我问这个是因为我要开始开发桌面应用程序并考虑使用 Electron 进行开发。
此外,应用程序的打包将 运行 在所有三个平台中? iOS、赢和Linux?我知道我必须照顾我导入的模块,这些模块可以是特定于平台的(例如'auto-updater')
Electron 应用程序的安全性不亚于个人计算机上托管的任何其他应用程序。如果一个不怀好意的人获得了对您计算机的访问权限,那么您的应用程序是使用 Electron、WPF 还是任何其他技术都无关紧要。他们可以找到一种方法来对用户使用该应用程序。此外,大多数代码都可以进行逆向工程并利用漏洞。我认为你不必为此担心。如果像 GitHub(谁制造了它)、Microsoft 和 Slack 这样不安全的公司会避免它。
也就是说,如果您想尝试向用户隐藏信息,Electron 源代码更容易查看,因为它不是二进制形式。例如,您可以进入 Visual Studio 基于 Electron 构建的代码和 view/manipulate 源代码的应用程序文件夹。我不确定许可证是否允许,但你可以这样做。您可以通过多种方式缓解这种情况。您可以混淆 JavaScript 并将其放入 ASAR 等。
我不确定我是否完全理解你的最后一个问题。 Electron 在 Windows、Mac(OSX 而不是 iOS)和 Linux 上确实 运行。假设您拥有正确的模块,则可以在所有三个上下载并执行一个包。至于安装,Squirrel 似乎是一个受欢迎的选择。您将需要为每个平台调整内容。查看 Visual Studio 代码如何针对每个平台执行此操作,我建议您效仿。
我建议,如果应用程序是信息敏感的或企业应用程序,则在另一个 "traditional" 框架中执行。在 Electron 中,可以轻松获得源代码、修改它甚至重新打包它,因为使用该应用程序的任何人都可以使用纯 JS 文件。我知道大多数人都说 "you can obfuscate it",但是有很多在线工具可以 "beautify" 代码并取回非常相同的东西。还有一些 "obfuscators" 设法破解了密码。
安全是相对的。没有什么是完全安全的。安全的想法是让突破你的安全变得足够困难,希望它不值得花费时间和精力。这取决于恶意人员的动机,这通常取决于正在处理或存储的信息类型或正在执行的服务。您可以将其比作在前门上锁。大多数锁都不是很安全,因为受过 pick/bypass 训练的人通常可以很容易地做到这一点。但是他们阻止了普通人仅仅出于偶然的诱惑或好奇而选择打开你的门。
如果程序代码编写得当,那么即使黑客可以查看代码,它也应该是安全的。如果不是这样,所有开源软件都将不安全,因为其他人可以看到代码。但是,如果您正在制作的应用程序的性质是它需要尽可能安全,那么您可以更上一层楼,通过避免人们查看代码来使其更加安全,以防万一给了他们如何利用它的想法。如果那是你想要的,那么在我看来 Electron 不是你最好的选择。人们可以直接查看您的代码。即使它被混淆了,仍然会留下 JavaScript 代码,正如 @Cenebyte321 指出的那样,它可以在某种程度上“美化”。尽管经过适当混淆的代码的美化版本就其所呈现的概念而言不会是干净或可读的代码。它不会接近原始版本。否则,您可以使用任何工作代码,并通过 运行 对其进行美化,使其具有可读性和组织性。很高兴认识到,从技术上讲,您可以将任何可执行文件反编译回源代码。即使是用 C 编写的二进制程序也可以转换回 C 代码。在那种情况下,生成的“混淆”代码可能甚至是晦涩难懂的,所以这样做有一些好处。但是,它仍然可以被反编译,而且它应该是有效的 C 代码。永远不应依赖隐藏或混淆代码来确保安全。充其量,它可以在您的实际安全之外增加一层困难。或者,将您的代码开源并邀请人们审核您的代码并报告漏洞也是一个不错的策略。
一旦恶意代码进入系统,就很难防范。更重要的是确保应用程序与之通信的任何服务器都是安全的(同样,在相对意义上)并且对它们的 API 是安全的。它应该足够安全,如果有人查看您应用程序的源代码,并弄清楚您服务器的 API 是如何工作的,那对您来说没有问题。与服务器的任何敏感通信都应加密。您不希望源代码中存在一些管理员用户名和密码。但是你不希望用任何语言编写的任何应用程序都这样。
理想情况下,保存在用户计算机上的任何密码在保存之前都应该以某种方式进行转换(可能以多种方式加盐和散列,或者现在酷孩子们正在做的任何事情),这样如果有人获得了访问权限数据,他们只能看到它的修改版本。正确完成此操作后,应该没有办法解密密码,尽管人们可以使用一些技术来尝试生成将产生相同散列值的密码。您应该只将正常输入密码的更改版本与实际密码的已保存更改版本进行比较。安全存储密码和安全 APIs 以及与服务器通信的原则并不特定于 Electron,您使用的任何语言或框架都需要同样仔细考虑安全性。
为了防止我的话产生误导,我并不是在暗示在本地存储用于访问服务器的密码是标准做法。理想情况下,用户每次会话都必须输入这种性质的密码,而且它永远不会存储在本地。但为方便起见,某些应用程序确实允许您在本地存储密码,因此您不必每次都输入密码。实际上,这取决于通过这些密码访问的数据的敏感程度以及便利性对您的用户的重要性。一个常见的中间立场是不要求用户每次都再次输入密码,但这可能并不意味着密码实际上存储在本地。
但如果恶意软件 运行 在您用户的计算机上,它可能无论如何都会记录他们的击键并以此方式辨别用户名和密码。即使是加密通信也不是万无一失的,因为最终会在其中发现安全漏洞,并开发出更新的协议。有时政府或其他人知道有意设计成一种加密类型的后门。只是希望其他人还没有发现那些后门,因为它们确实存在本质上是故意设计到加密协议中的安全漏洞。随着 JavaScript 工具变得越来越先进,经过混淆的 JavaScript 代码可能几乎与经过混淆的 C 代码一样晦涩难懂,或者可能已经有工具可以实现这一点。
是的,用 electron 构建的 Off-course 桌面应用程序不太安全,除非像我这样的人沉迷于调试它。最近 yahoo messenger 更新到新版本,内置了一个电子原子。并重新编译它并更改了图标。 为我想要的图标重新编译雅虎通:
yahoo新编译与重编译的对比: