首页 > 解决方案 > 节点是否根据文件扩展名或类似于php的类型执行服务器端脚本?

问题描述

一般背景

我试图了解与基于 MERN/MEAN(Mongo Express React/Angular NodeJS)堆栈构建的 Web 应用程序相关的一般安全问题。我没有构建 PHP 应用程序的经验,但许多漏洞示例都参考了 PHP,因此我试图了解基于 PHP 的应用程序中的哪些漏洞在基于节点/express 的应用程序中具有类似物。今天,我关心的是服务器上的脚本执行。

细节

在 Node/Express 中,我不熟悉在静态服务目录中触发包含脚本的文件执行的方法,而无需定义特殊路由并硬编码脚本的调用,如下所述:运行 Bash 脚本来自客户端请求的节点

并在这里缩写:

const { spawn } = require('child_process');
...
app.get('/script-file', function(req,res) {
    let command = spawn(__dirname + '/script-file.sh');
...

相比之下,如果我正确理解 PHP 和 Apache 的行为,一个 GET 请求

http://example.com/script.php

将导致 script.php 在服务器上执行,并将该脚本的输出发送到客户端 - 触发执行不需要特殊路由,只需“.php”文件扩展名。如果在 webroot 中存在(上传)另一个文件,称为“evil-script.php”,用户可以简单地请求该文件以触发其执行。似乎文件的处理(是否在服务器上执行)取决于文件的扩展名(.php 被执行,.txt 不被执行)。

主要问题

当在 GET 请求中识别时,是否存在默认在节点中执行的等效扩展名或文件类型?

后续问题

标签: phpnode.jsapachesecurity

解决方案


推荐阅读