ejs并表达公共和私人路线的查看页面

时间:2020-03-08 03:28:54

标签: javascript node.js express ejs

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

我的问题不是性能方面的问题,而是安全性方面的问题:

对于我的前端javascript文件,我需要拆分成两个文件,以便一个js文件用于所有公共路线页面,而另一个js用于所有私有路线页面吗?如果我仅将一个客户端js文件用于公共路由和私有路由查看页面,是否会出现任何类型的安全问题?因为如果我仅使用一个客户端js文件,那么我还将使用该js文件在私有路由(例如,dashboard.ejs)中操纵其他类型的DOM元素。

示例:

如果我有两个公共路由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操作等...

对不起,如果这个问题有点...我仍然是Web开发的新手。

谢谢

2 个答案:

答案 0 :(得分:1)

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

如果您的private.js只是在浏览器中进行DOM操作,则可能甚至没有任何安全原因来保护它。如果服务器完成其工作,并拒绝使用适当的凭据发送任何受保护的数据,则只有客户端JS文件无法执行任何操作以暴露此类数据。

如果private.js包含一些您认为其中的秘密,那么我们就必须真正了解这些秘密和风险。在大多数(也许所有)情况下,这些“秘密”可能应该移至服务器,在这些服务器上,只有提供了适当的授权凭据后,这些秘密也才可操作或访问。服务器上的代码是您隐藏“秘密”内容的地方,而不是客户端JS文件。

对于我的前端javascript文件,我需要拆分成两个文件,以便一个js文件用于所有公共路线页面,而另一个js用于所有私有路线页面吗?

这不应该真正涉及安全性。您的JS文件不应包含重要机密。这应该更多地是关于代码结构和组织以提高操作效率(例如,不向不会使用它的页面发送大量代码)。

如果仅将一个客户端js文件用于公共和私有路由查看页面,会不会存在任何安全性问题?因为如果我仅使用一个客户端js文件,那么我还将使用该js文件在私有路由(例如,dashboard.ejs)中操纵其他类型的DOM元素。

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

答案 1 :(得分:0)

所以我同意jfriend00所说的,但我也会补充自己的观点。

对于我的前端javascript文件,我需要拆分成两个文件,以便一个js文件用于所有公共路线页面,而另一个js用于所有私有路线页面吗?如果我仅将一个客户端js文件用于公共路由和私有路由查看页面,是否会存在任何类型的安全问题?

就像其他评论一样,这并不是真正的安全问题。如果您正在编写前端JS,则唯一潜在的安全漏洞就是您包含API密钥,令牌,机密信息等。但这仍然与最佳实践背道而驰。因此,拆分文件实际上仅取决于组织结构。

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

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