【问题标题】:ejs and express public and private route's view pagesejs 和表达公共和私有路由的视图页面
【发布时间】:2020-03-08 03:28:54
【问题描述】:

最近我正在使用 express 和 ejs 创建一个网站,所以除了 express 和 ejs,我还将在前端有一个 css 和一个 javascript 文件,我正在创建的网站将有一个用户必须登录的仪表板首先看到并使用仪表板,因此总体而言,我的网站将只有很少的公共路线和两到三个私人路线(用户必须登录才能与之交互)。

我的问题不是关于性能的观点,而是关于安全的观点:

对于我的前端 javascript 文件,我是否需要拆分为两个文件,以便一个 js 文件用于所有公共路由页面,另一个用于所有私有路由页面?如果我只对公共和私有路由视图页面使用一个客户端 js 文件,是否会有任何类型的安全问题?因为如果我只使用一个客户端 js 文件,我也会使用该 js 文件来操作私有路由中不同类型的 DOM 元素(例如dashboard.ejs)。

示例:

如果我有两个公共路由,index.ejs 和 about.ejs,当用户访问这些公共路由时,服务器会将 public.js 发送到客户端,如下所示:

<body>
  <div class="container">
    <h1>index page</h1>
  <div>
  <script src="./public.js"></script> //This js file is used for all PUBLIC routes view pages
</body>
<body>
  <div class="container">
    <h1>about page</h1>
  <div>
  <script src="./public.js"></script> //This js file is used for all PUBLIC routes view pages
</body>

在用户登录并访问私有路由视图页面后,例如dashboard.ejs,服务器会将private.js发送到客户端,如下所示:

<body>
  <div class="container">
    <h1>dashboard page</h1>
  <div>
  <script src="./private.js"></script> //This js file is used for all PRIVATE routes view pages
</body>

是否需要使用上述方法来避免任何类型的安全问题,或者我可以只使用一个客户端 js 文件来处理所有公共和私有路由视图页面 DOM 操作等...?

对不起,如果这个问题有点……我还是网络开发的新手。

谢谢

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    首先,在响应中发送任何受保护的数据之前,通过在传入的 http 请求上要求适当的凭据来实现数据的安全性。这不是通过隐藏客户端 Javascript 文件来实现的。这是通过对在 http 响应中发送任何受保护数据的任何 http 请求执行凭据检查来实现的。

    如果您的 private.js 只是在浏览器中进行 DOM 操作,那么甚至可能没有任何安全理由来保护它。如果服务器完成其工作并拒绝发送任何具有适当凭据的受保护数据,那么只有客户端的 JS 文件无法公开此类数据。

    如果 private.js 中有一些你认为是秘密的东西,那么我们必须真正了解它们是什么以及风险是什么。在大多数(也许是所有)情况下,这些“秘密”可能应该被移动到服务器,在那里它们也只有在提供了适当的授权凭证时才可操作或访问。服务器上的代码是您隐藏“秘密”事物的地方,而不是客户端 JS 文件。

    对于我的前端 javascript 文件,我是否需要拆分为两个文件,以便一个 js 文件用于所有公共路由页面,另一个用于所有私有路由页面?

    这不应该真的与安全有关。您的 JS 文件不应包含重要机密。这应该更多地是关于代码结构和组织以实现高效操作(比如不要将大量代码发送到永远不会使用它的页面)。

    如果我只为公共和私有路由视图页面使用一个客户端 js 文件,是否会出现任何类型的安全问题?因为如果我只使用一个客户端 js 文件,我也会使用该 js 文件来操作私有路由中不同类型的 DOM 元素(例如dashboard.ejs)。

    如前所述,操作 DOM 元素的 JS 不应被视为秘密代码。它本身不会带来任何安全风险。数据在到达客户端之前需要由您的服务器保护。

    【讨论】:

      【解决方案2】:

      所以我同意 jfriend00 提到的内容,但我也会添加我的观点。

      对于我的前端 javascript 文件,我是否需要拆分为两个文件,以便一个 js 文件用于所有公共路由页面,另一个用于所有私有路由页面?如果我只为公共和私有路由视图页面使用一个客户端 js 文件,会不会出现任何类型的安全问题?

      与其他评论一样,这并不是真正的安全问题。如果您正在编写前端 JS,唯一潜在的安全漏洞是您是否包含 API 密钥、令牌、机密等。但这无论如何都违背了最佳实践。所以拆分文件实际上只归结为组织结构。

      话虽如此,如果您的 JS 代码仅与处理后端路由和其他后端逻辑相关,则可以创建一个文件夹(不提供给客户端)来保存后端JS 文件。这样,您的代码就会被组织起来,并且您不会暴露任何您可能希望或可能不希望隐藏的逻辑。登录页面的表单验证器就是一个例子。

      这只是我认为可能有用的另一个用例。但我相信您想要实现的只是操纵不应构成安全威胁的 DOM 元素。如果您考虑一下,任何人都可以通过浏览器的开发工具修改 DOM 元素。但它不会真正损害您的数据、服务器端逻辑或其他任何东西。

      【讨论】:

        猜你喜欢
        • 2021-06-17
        • 2019-12-27
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 2020-10-30
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多