如果我在 Blazor 中遗漏了一些明显的东西,请原谅我,但由于 dll 像 javascript 文件一样存在于浏览器中,用户是否可以下载 dll 文件并通过反编译文件和/或运行它们来查看执行代码在浏览器之外?
如果开发人员不知道他们的库代码与他们的 javascript 代码一样可见,这似乎提出了一个非常明显的安全问题。
如果我在 Blazor 中遗漏了一些明显的东西,请原谅我,但由于 dll 像 javascript 文件一样存在于浏览器中,用户是否可以下载 dll 文件并通过反编译文件和/或运行它们来查看执行代码在浏览器之外?
如果开发人员不知道他们的库代码与他们的 javascript 代码一样可见,这似乎提出了一个非常明显的安全问题。
当然可以,这些 DLL 只是 Web 服务器提供的静态文件。我建议阅读这篇关于浏览器如何运行这些 DLL的优秀博客文章:
在解释模式下,Mono 运行时本身被编译为 WebAssembly,但您的 .NET 程序集文件不是。然后,浏览器可以加载和执行 Mono 运行时,进而可以加载和执行由普通 .NET 编译工具链构建的标准 .NET 程序集(常规 .NET .dll 文件)。
如果您不希望用户(轻松地)对您的代码进行逆向工程,那么答案就是code obfuscation。Blazor不打算提供此类功能,任何标准的 .NET 混淆器都应该可以工作。我自己没有尝试过,但我相信这将是一条崎岖不平的道路。
确实是的。
这就是为什么有 2 种 Blazor 风味的部分原因:
Blazor 服务器应用只会使用以下文件响应浏览器:
所有的渲染代码和其他代码(你很棒的库和你很棒的代码)都将在服务器上运行。
使用 SignalR,浏览器和服务器将不断保持联系(通常通过 websockets),并且每当 UI 需要更改时,服务器将进行计算并告诉浏览器如何重新渲染 UI。由于blazor.server.js文件,所有这些魔法都发生在浏览器中。
使用这种模式,浏览器上不需要DLL
现在,当谈到Blazor WebAssembly(客户端风格)时,您可能不想向浏览器提供任何敏感的专有代码等。当然,您总是可以使用工具来混淆您的代码,但您可能想要在可能的情况下调用 API 并在服务器上运行敏感代码。