Skip to content

Commit 185ec94

Browse files
author
Taois
committed
feat: 发布新版本
1 parent bcc9871 commit 185ec94

File tree

5 files changed

+32
-2
lines changed

5 files changed

+32
-2
lines changed

.env.development

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,7 @@ API_ACTION_TIMEOUT=60
6161
WEBDAV_DEBUG=0
6262

6363
# 是否启用后台管理在线终端模拟功能 (0/false不启用,1/true启用,默认0)
64-
ENABLE_TERMINAL=0
64+
ENABLE_TERMINAL=0
65+
66+
# 生产环境只读模式(开启后将禁止通过管理面板修改/删除文件、禁止远程重启服务,防止RCE)
67+
READ_ONLY_MODE=0

controllers/admin/filesController.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ export async function readFile(req, reply) {
114114
// 写入文件
115115
export async function writeFile(req, reply) {
116116
try {
117+
if (process.env.READ_ONLY_MODE === '1') {
118+
return reply.code(403).send({
119+
error: '系统当前处于只读模式,禁止修改文件'
120+
});
121+
}
122+
117123
const { path: filePath, content } = req.body;
118124

119125
if (!filePath || !isSafePath(filePath)) {
@@ -144,6 +150,12 @@ export async function writeFile(req, reply) {
144150
// 删除文件
145151
export async function deleteFile(req, reply) {
146152
try {
153+
if (process.env.READ_ONLY_MODE === '1') {
154+
return reply.code(403).send({
155+
error: '系统当前处于只读模式,禁止删除文件'
156+
});
157+
}
158+
147159
const { path: filePath } = req.query; // in fastify, DELETE params might be in query or we can use body depending on client
148160

149161
const fp = filePath || (req.body && req.body.path);

controllers/admin/systemController.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ export async function getHealth(req, reply) {
5959
// 服务重启
6060
export async function restartService(req, reply) {
6161
try {
62+
if (process.env.READ_ONLY_MODE === '1') {
63+
return reply.send({
64+
success: false,
65+
message: '系统当前处于只读模式,禁止远程重启服务'
66+
});
67+
}
68+
6269
// 检查是否在 PM2 环境运行
6370
try {
6471
await execPromise('pm2 restart drpys');

controllers/admin/terminalController.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,22 @@ try {
2020
export const getTerminalStatus = (req, reply) => {
2121
// 检查环境变量是否启用了终端功能,默认不启用 (0 或 false)
2222
const isTerminalEnabled = process.env.ENABLE_TERMINAL === '1' || process.env.ENABLE_TERMINAL === 'true';
23+
const isReadOnly = process.env.READ_ONLY_MODE === '1';
2324

2425
return reply.send({
25-
available: isPtyAvailable && isTerminalEnabled
26+
available: isPtyAvailable && isTerminalEnabled && !isReadOnly
2627
});
2728
};
2829

2930
export const handleTerminalWs = (socket, req) => {
3031
const isTerminalEnabled = process.env.ENABLE_TERMINAL === '1' || process.env.ENABLE_TERMINAL === 'true';
3132

33+
if (process.env.READ_ONLY_MODE === '1') {
34+
socket.send('\r\n\x1b[31m[!] Terminal feature is disabled because the system is in READ_ONLY_MODE.\x1b[0m\r\n');
35+
socket.close();
36+
return;
37+
}
38+
3239
if (!isTerminalEnabled) {
3340
socket.send('\r\n\x1b[31m[!] Terminal feature is disabled. Please set ENABLE_TERMINAL=1 in .env to enable it.\x1b[0m\r\n');
3441
socket.close();

docs/updateRecord.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
3. 修复了RSA在node24以上版本不兼容PCSK1解密协议问题导致APP影视模板.js分发的源不可用问题(重要)
1010
4. 后台管理继续打磨,4层保底使用SQLite,最明确方式获取当前项目目录,修复上个版本在大部分市面壳子上出现服务异常的问题
1111
5. 加了点隐藏功能,一般人应该发现不了
12+
6. 增加了RCE攻击防护
1213

1314
### 20260320
1415

0 commit comments

Comments
 (0)