Exo*_*uid 16 javascript reactjs next.js
我正在学习 NextJS,并试图确定如何使用干净且安全的架构来布局我的项目。但是,我不确定在哪里存储包含潜在敏感数据的代码(即与数据库的连接、访问文件系统等)。我已阅读文档,但我仍然不确定这一问题。
在我的项目布局中,我有 2 个与此问题相关的目录:我添加的顶级目录/lib和/pages/api每个 NextJS 项目中包含的目录。
据我了解,/pages/api永远不会看到客户端,因此对于敏感代码来说是安全的。它只能用作进行发布、修补、删除等操作的地方。使用的示例/pages/api是当您从表单向服务器发出发布请求时。您可以从任何地方从此路由调用 api,例如:表单组件、文件/lib夹、中的页面/pages、外部第 3 方 api - 无论何处。
另一方面,顶级/lib目录是样板代码的地方,执行繁琐的操作,例如按字母顺序对博客文章进行排序、进行数学计算等,这不一定是“秘密”或敏感的 - 只是长而烦人的代码。该/lib目录始终会被客户端看到 -即使它的代码仅由服务器端方法(例如getStaticProps().
简而言之,任何远程敏感的内容都应该始终作为对目录的发布、补丁、放置等请求/pages/api,并且任何不敏感的长/乏味代码都应该重构到/lib目录中。
我有这个好吗?
你可以在 api 路由中做敏感的事情,,getServerSideProps。除非您的页面实际从那里导入代码,否则客户端不会看到您的getStaticProps任何代码。/lib
由于您正在谈论数据库连接,因此您不太可能意外地从浏览器连接到数据库。几乎所有用于连接数据库的库都无法在浏览器中工作,并且您也只能访问以NEXT_PUBLIC_客户端开头的环境变量。
您还需要记住,下面的每个文件都/api将是一个 api 路由,因此您应该将帮助程序文件放入其中/lib而不是/api. 如果将它们放在 下,/api可能会导致安全漏洞,因为任何人都可以触发 下文件的默认导出功能/api。
如果您出于某种原因需要绝对确定某些代码没有捆绑到客户端将加载的文件中,即使您不小心导入了它,也可以使用自定义 webpack 配置来完成。请注意,如果代码本身非常敏感,我只会研究此选项。因为有人能够阅读代码会导致后果。不谈论执行数据库查询或类似操作的代码,即使您意外地将它们导入到客户端捆绑包中,也不会构成任何威胁,因为客户端无法连接到您的数据库。
| 归档时间: |
|
| 查看次数: |
6436 次 |
| 最近记录: |