5

如果我在 Blazor 中遗漏了一些明显的东西,请原谅我,但由于 dll 像 javascript 文件一样存在于浏览器中,用户是否可以下载 dll 文件并通过反编译文件和/或运行它们来查看执行代码在浏览器之外?

如果开发人员不知道他们的库代码与他们的 javascript 代码一样可见,这似乎提出了一个非常明显的安全问题。

4

2 回答 2

4

当然可以,这些 DLL 只是 Web 服务器提供的静态文件。我建议阅读这篇关于浏览器如何运行这些 DLL的优秀博客文章:

在解释模式下,Mono 运行时本身被编译为 WebAssembly,但您的 .NET 程序集文件不是。然后,浏览器可以加载和执行 Mono 运行时,进而可以加载和执行由普通 .NET 编译工具链构建的标准 .NET 程序集(常规 .NET .dll 文件)。

如果您不希望用户(轻松地)对您的代码进行逆向工程,那么答案就是code obfuscation。Blazor不打算提供此类功能,任何标准的 .NET 混淆器都应该可以工作。我自己没有尝试过,但我相信这将是一条崎岖不平的道路。

于 2019-10-07T20:33:44.127 回答
2

确实是的。

这就是为什么有 2 种 Blazor 风味的部分原因:

  1. Blazor WebAssembly(即客户端 Blazor)
  2. Blazor 服务器

Blazor 服务器应用只会使用以下文件响应浏览器:

  • 索引.html
  • css
  • blazor.server.js
  • 其他常用的东西(例如 img 的字体等)

所有的渲染代码和其他代码(你很棒的库和你很棒的代码)都将在服务器上运行。

使用 SignalR,浏览器和服务器将不断保持联系(通常通过 websockets),并且每当 UI 需要更改时,服务器将进行计算并告诉浏览器如何重新渲染 UI。由于blazor.server.js文件,所有这些魔法都发生在浏览器中。

使用这种模式,浏览器上不需要DLL

现在,当谈到Blazor WebAssembly(客户端风格)时,您可能不想向浏览器提供任何敏感的专有代码等。当然,您总是可以使用工具来混淆您的代码,但您可能想要在可能的情况下调用 API 并在服务器上运行敏感代码。

于 2020-02-12T08:39:35.967 回答