我试图了解以下安全方面:
如果我理解正确,在 PHP 中,URL 直接路由到服务器上的特定文件。例如https://mypage.com/secretFunctions.php将路由到secretFunctions.php. 如果我通过基本身份验证保护此路由,身份验证将在处理文件并将其提供给客户端之前进行。结果,只有经过身份验证的用户才能看到呈现的内容。
如果是客户端 node.js 应用程序,整个 App.js 代码将发送到客户端并在那里进行处理。URL 始终指向同一个文件。该文件中定义的路由决定了将执行和呈现的代码片段。即使我通过任何类型的身份验证保护任何特定路由,用户仍将获得整个代码。
有没有办法防止这种情况?防止客户端收到私有路由的私有代码,只要不认证就行?
在 node.js 中,整个 App.js 代码被发送到客户端并在那里处理。
不,它根本不是这样工作的。 当您在服务器上运行 node.js 和代码时,该代码永远不会发送到客户端。它只是在服务器上运行。客户端无法访问它。如果您使用命令行运行 node.js 应用程序node app.js,则会运行节点可执行引擎并在服务器上执行 app.js。
在 node.js 服务器中,您通常不会定义私有路由,而是希望仅在没有客户端访问权限的服务器实现中使用它们。虽然可以完成(使用某种形式的只有服务器知道的授权令牌),但您通常根本不会在公共服务器上使用私有路由。相反,您不必自己请求私有路由,而只需将相关代码放在一个函数中并直接调用该函数。然后,它完全是服务器实现私有的。
然后,app.js 将启动一个 http 服务器进程并定义它希望该服务器处理的路由。当客户端出现并从服务器请求路由时,app.js 代码(或它加载的其他模块)将解析请求的路由,将其映射到为该路由定义的处理程序并仅执行 node.js 代码那应该处理那条路线。完成该路由的处理后,它将发送响应。根据请求的类型,该响应可能是浏览器将解析和显示的网页,也可能是作为请求结果的一段 JSON,也可能是任意数量的其他数据类型。
发送到客户端的唯一代码是嵌入在网页中并专门用于在浏览器内运行的 Javascript 代码。那不会是 node.js 代码,也不是您的服务器代码。那将是浏览器 Javascript,就像与任何后端框架一起使用一样(node.js 在这方面与任何其他框架没有什么不同)。
有没有办法防止这种情况?防止客户端收到私有路由的私有代码,只要不认证就行?
这部分问题主要是被误导了,因为它似乎是基于对 node.js 后端应用程序服务器如何工作的误解。您可以通过不首先将代码发送到客户端来防止代码发送到客户端。客户端无法从您的服务器看到您没有专门处理和发送响应的路由的任何内容。默认情况下,node.js Web 服务器不会向客户端发送任何内容。默认情况下不发送页面。因此,发送给客户端的唯一内容是您专门编写代码发送的响应。请注意,这与其他后端(如 Apache)不同,后者可能被配置为自动发送大量请求的内容。
如果我理解正确,在 PHP 中,URL 直接路由到服务器上的特定文件。例如https://mypage.com/secretFunctions.php将路由到 secretFunctions.php。
那就是PHP。这不是 node.js Web 服务器的工作方式。对于https://mypage.com/secretFunctions.php完全响应客户端的路由,您必须在服务器代码中定义一个路由,该路由是专门为响应请求/secretFunctions.php而编码的,然后您将定义在收到该请求时应在服务器上运行的代码。除非您在此路由处理程序中专门编写代码以将代码发送到要在浏览器中运行的客户端,否则不会向客户端发送任何代码。
让我向您展示一个非常简单的 node.js 应用程序,它响应三个路由(并且只有三个路由)。让我们说这是app.js:
const app = require('express')();
app.get('/', function(req, res) {
res.send("Hello");
});
app.get('/name', function(req, res) {
res.send("My name is Bob");
});
app.get('/city', function(req, res) {
res.send("I am in San Francisco");
});
// start the server
app.listen(80);
Run Code Online (Sandbox Code Playgroud)
您使用node app.js. 当它运行 app.js 时,它会初始化一个 express 框架的实例,注册三个路由处理程序,然后启动 Web 服务器。
现在,您有一个正在运行的 Web 服务器。假设您有一个 Web 浏览器在同一台服务器上运行,并且您在 URL 栏中键入:http://localhost。这将触发'/'路由处理程序并在浏览器中显示“Hello”。
然后,您http://localhost/name在浏览器中键入。这将在浏览器中显示“我的名字是鲍勃”。
如果您键入除此处定义的这三个路由之外的任何其他路由,则不会向浏览器发送任何内容。是否有contacts.html文件位于同一目录中并不重要。如果没有特定的编码路由来处理请求,则不会发送任何内容。因此,默认情况下不会发送私人代码。
现在,有一些方法可以指示您的服务器自动发送一些静态文件,但这需要一种特殊的路由,该路由被准确告知要查找的路由前缀以及服务器上的哪个目录查找可能与以下 URL 匹配的文件要求。这可以针对您自己特定位于目录中的静态文件(例如 .css 文件)完成,您打算在请求时发送给客户端。而且,您必须使用正确的代码来实现这一点。默认情况下,这永远不会发生。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |