php - 节点是否根据文件扩展名或类似于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 请求中识别时,是否存在默认在节点中执行的等效扩展名或文件类型?
后续问题
- 如果不是,这是否意味着 php 存在通常配置的 node/express 中根本不存在的安全问题?
- 这实际上是 node 与 apache 的比较吗?
- 说这些堆栈体现了非常不同的哲学是否正确,或者这是一个细节?
解决方案
推荐阅读
- python - python值错误时间数据%Z
- wso2 - wso2am-2.2.0 分布式设置 - 不发布事件
- javafx - JavaFX“需要位置。”我已经尝试了所有解决方案
- scala - 是否有使用 Scala+PlaySpec+Mockito 的每次测试非特定模拟重置模式?
- javascript - ES模块导入不起作用
- ansible - 在一个剧本中注册主机之间的变量使用情况
- ssl - 证书链如何呈现给客户端?
- jquery - 无法将 JSP 中的完整表单值发送到 Spring 控制器
- java - 我有两个图像视图,但是当我调用一个图像视图来设置图像时,它们都设置了相同的图像
- angular - Froala 编辑器在 Angular 6 中隐藏图像编辑选项