【问题标题】:Securing HTML and JS files in SPA with .NET使用 .NET 保护 SPA 中的 HTML 和 JS 文件
【发布时间】:2014-01-17 22:16:11
【问题描述】:

我开始使用 .NET 和 Durandal JS 开发单页应用程序,我想知道如何保护应用程序的 HTML 和 JS 文件。我说的是 App 文件夹中的文件,这些文件目前可以通过 URL 直接访问,我想防止这种情况发生。

当然,由于 HTML 无论如何都会显示给用户,因此似乎没有必要这样做,但我真的认为最好有这个,主要是保护 JS 逻辑不被直接访问。我正在查看 SPA 中的一些身份验证示例,其中大部分都公开了以这种方式使用的一些逻辑。

我该怎么做?如何防止直接访问这些文件?我想通过路由映射到控制器中的操作来返回错误,但我认为这样我的 javascript 也会被阻止。

【问题讨论】:

  • 为什么要这样做?记住 JavaScript 是客户端,它在用户的浏览器中运行!我认为最好使用 C# 或 Java 而不是 JavaScript 在服务器上执行所有需要安全性的逻辑。因为一旦它被抽到用户机器上,你就无法控制了。

标签: javascript asp.net security


【解决方案1】:

首先,试图阻止人们在客户端上运行的应用程序中下载和检查客户端代码是徒劳的。如果你给某人一些计算机可以在他有权访问的系统中执行的东西,那么某人可以对其进行逆向工程,或者找到可以执行的人。通常情况下,唯一遭受您的技巧和黑客攻击并试图阻止它们的人是您,即开发人员,他们既浪费时间实现将失败的东西,又在调试自己的工作时尝试解决它。​​


如果您真的有兴趣阻止随便偷窥您的工作,那好吧。

您可以minifyassets 以一种也混淆的方式,但所做的只是暂时不方便(但是,这种方法在减少页面重量方面仍然很有价值)。有很多工具可以轻松地去缩小代码。

您可以想出一种方法,让初始页面和脚本引导应用程序的其余部分,例如,要求它在标头中放置某个值,并让您的 HTTP 服务器阻止向某些文件提供资源,除非它们有那个标题。但是可以轻松地检查、重新创建和手动发出请求以规避这种情况。

也许已经做出了一些努力来创建一个 shell 应用程序或浏览器,它只执行您打包成某种加密格式并可以使用密钥打开的受信任代码。或者也许是浏览器插件。我不知道。你可以想出任何你想要的疯狂的东西,但这值得吗?人们会想要使用它吗?如果你让某人难以使用某物,他们就不会。


因此,关键是尽量减少您为客户提供的在您认为无价和/或商业机密的机器上运行的内容。您可以制定真正不那么特别的策略(老实说,您的应用程序 UI 的客户端代码真的没有那么有价值...不是因为您没有创建某些东西很棒,但代码只是达到目的的手段)并选择正确的技术方法来提供该服务,但不要将其置于人们手中。

因此,如果您对业务模型有一些特殊要求,请不要在客户端全部实施。将关注点分为客户端职责和服务器职责。将客户端限制在基本 UI、从用户获取信息、发送到服务器并显示响应。将服务器上的秘密酱汁放在他们看不到的地方。

您不必将其设为 SPA...只需将其设为标准 ASP.NET WebForms 或 MVC 并完成即可。如果您确实使用 SPA,则必须接受其内在原则。

如果这是不可能的,并且所有逻辑都必须在客户端上,那么您需要做出决定。要么 a) 不打扰 b) 尝试构建完美安全的小环境(这将失败),要么 c) 依赖与用户的法律协议。

TL;DNR:我的意见?为你的工作感到自豪,让它的价值独立存在。将私有业务逻辑保留在服务器端并进行适当的架构设计,除了放弃人们看到您的客户端代码会威胁您的业务的想法之外,这是一种简单而合理的方法。另外,缩小你的 JS。它不会保护您的知识产权,但它还有其他更实际的好处。

【讨论】:

    【解决方案2】:

    这是我的建议:

    1. 您需要使用 .NET 表单身份验证。这将允许您
    2. 要像这样设置您的 web.config:
    <compilation ...> 
           <buildProviders>
            <add extension=".html" type="System.Web.Compilation.PageBuildProvider"/>
            <add extension=".htm" type="System.Web.Compilation.PageBuildProvider"/>
            <add extension=".js" type="System.Web.Compilation.PageBuildProvider"/>
          </buildProviders>
        </ compilation ...>
    

    此配置强制您的 html 和 js 针对您的表单身份验证进行验证,而不会失去 MVVM Javascript 框架的奇迹。

    1. 再次在 web.config 中设置角色和权限可能基于文件夹,以保护 html 和 js 文件,如下所示:
    <location path="js/app/folder1">
        <system.web>
          <authorization>
            <deny users="?"/>
            <allow roles="role1"/>
          </authorization>
        </system.web>
      </location>
     <location path="js/app/folder2">
        <system.web>
          <authorization>
            <deny users="?"/>
            <allow roles="role2"/>
          </authorization>
        </system.web>
      </location>
      </location>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 2010-10-12
      • 2012-06-14
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      相关资源
      最近更新 更多