11package com .cym .controller .adminPage ;
22
33import java .io .File ;
4- import java .io .InputStream ;
54import java .nio .charset .StandardCharsets ;
5+ import java .nio .file .Path ;
6+ import java .nio .file .Paths ;
67import java .util .HashMap ;
78import java .util .List ;
89import java .util .Map ;
3132
3233import cn .hutool .core .codec .Base64 ;
3334import cn .hutool .core .io .FileUtil ;
34- import cn .hutool .core .io .resource . ClassPathResource ;
35+ import cn .hutool .core .io .file . PathUtil ;
3536import cn .hutool .core .util .CharsetUtil ;
3637import cn .hutool .core .util .RuntimeUtil ;
3738import cn .hutool .core .util .StrUtil ;
38- import cn .hutool .core .util .ZipUtil ;
3939import cn .hutool .json .JSONArray ;
4040import cn .hutool .json .JSONObject ;
4141import cn .hutool .json .JSONUtil ;
@@ -269,22 +269,61 @@ public JsonResult check(String nginxPath, String nginxExe, String nginxDir, Stri
269269 @ Mapping (value = "saveCmd" )
270270 public JsonResult saveCmd (String nginxPath , String nginxExe , String nginxDir ) {
271271 nginxPath = ToolUtils .handlePath (nginxPath );
272- settingService .set ("nginxPath" , nginxPath );
273-
274272 nginxExe = ToolUtils .handlePath (nginxExe );
275- settingService .set ("nginxExe" , nginxExe );
276-
277273 nginxDir = ToolUtils .handlePath (nginxDir );
278- settingService .set ("nginxDir" , nginxDir );
274+
275+ if (StrUtil .isNotEmpty (nginxPath ) && !isFile (nginxPath )) {
276+ nginxPath = null ;
277+ }
278+ if (StrUtil .isNotEmpty (nginxDir ) && !isFile (nginxDir )) {
279+ nginxDir = null ;
280+ }
281+ if (StrUtil .isNotEmpty (nginxExe ) && !isFile (nginxExe ) && !isSafeCmd (nginxExe )) {
282+ nginxExe = null ;
283+ }
284+ if (StrUtil .isNotEmpty (nginxExe ) && isFile (nginxExe ) && !isSafeEnd (nginxExe )) {
285+ nginxExe = null ;
286+ }
287+
288+ if (nginxPath != null ) {
289+ settingService .set ("nginxPath" , nginxPath );
290+ System .out .println ("nginxPath -> " + nginxPath );
291+ }
292+ if (nginxExe != null ) {
293+ settingService .set ("nginxExe" , nginxExe );
294+ System .out .println ("nginxExe -> " + nginxExe );
295+ }
296+ if (nginxDir != null ) {
297+ settingService .set ("nginxDir" , nginxDir );
298+ System .out .println ("nginxDir -> " + nginxDir );
299+ }
279300
280301 Map <String , String > map = new HashMap <>();
281302 map .put ("nginxPath" , nginxPath );
282303 map .put ("nginxExe" , nginxExe );
283304 map .put ("nginxDir" , nginxDir );
284-
305+ System . out . println ( "" );
285306 return renderSuccess (map );
286307 }
287308
309+ private boolean isSafeEnd (String nginxExe ) {
310+ return nginxExe .endsWith ("nginx" ) //
311+ || nginxExe .endsWith ("openresty" ) //
312+ || nginxExe .endsWith ("nginx.exe" ) //
313+ || nginxExe .endsWith ("openrestys.exe" );
314+ }
315+
316+ private boolean isSafeCmd (String nginxExe ) {
317+ return nginxExe .equals ("nginx" ) //
318+ || nginxExe .equals ("openresty" ) //
319+ || nginxExe .equals ("nginx.exe" ) //
320+ || nginxExe .equals ("openrestys.exe" );
321+ }
322+
323+ private boolean isFile (String path ) {
324+ return FileUtil .isDirectory (path ) || FileUtil .isFile (path );
325+ }
326+
288327 @ Mapping (value = "reload" )
289328 public synchronized JsonResult reload (String nginxPath , String nginxExe , String nginxDir ) {
290329 if (nginxPath == null ) {
@@ -308,7 +347,7 @@ public synchronized JsonResult reload(String nginxPath, String nginxExe, String
308347 String rs = RuntimeUtil .execForStr (cmd );
309348
310349 cmd = "<span class='blue'>" + cmd + "</span>" ;
311- if (!rs .contains ("[error]" )) {
350+ if (!rs .contains ("[error]" ) && ! rs . contains ( "[emerg]" ) ) {
312351 return renderSuccess (cmd + "<br>" + m .get ("confStr.reloadSuccess" ) + "<br>" + rs .replace ("\n " , "<br>" ));
313352 } else {
314353 if (rs .contains ("The system cannot find the file specified" ) || rs .contains ("nginx.pid" ) || rs .contains ("PID" )) {
@@ -331,7 +370,8 @@ public JsonResult runCmd(String cmd, String type) {
331370 }
332371
333372 // 仅执行nginx相关的命令,而不是其他的恶意命令
334- if (!isAvailableCmd (cmd )) {
373+ cmd = buildRealCmd (cmd );
374+ if (StrUtil .isEmpty (cmd )) {
335375 return renderSuccess (m .get ("confStr.notAvailableCmd" ));
336376 }
337377
@@ -359,17 +399,12 @@ public JsonResult runCmd(String cmd, String type) {
359399 }
360400 }
361401
362- // 仅执行nginx相关的命令,而不是其他的恶意命令
363- private boolean isAvailableCmd (String cmd ) {
364- // 过滤数据库中的路径
365- String nginxPath = ToolUtils .handleConf (settingService .get ("nginxPath" ));
366- settingService .set ("nginxPath" , nginxPath );
367- String nginxExe = ToolUtils .handleConf (settingService .get ("nginxExe" ));
368- settingService .set ("nginxExe" , nginxExe );
369- String nginxDir = ToolUtils .handleConf (settingService .get ("nginxDir" ));
370- settingService .set ("nginxDir" , nginxDir );
402+ private String buildRealCmd (String cmd ) {
403+ String dir = "" ;
404+ if (StrUtil .isNotEmpty (settingService .get ("nginxDir" ))) {
405+ dir = " -p " + settingService .get ("nginxDir" );
406+ }
371407
372- // 检查命令格式
373408 switch (cmd ) {
374409 case "net start nginx" :
375410 case "service nginx start" :
@@ -379,27 +414,58 @@ private boolean isAvailableCmd(String cmd) {
379414 case "systemctl stop nginx" :
380415 case "taskkill /f /im nginx.exe" :
381416 case "pkill nginx" :
382- return true ;
383- default :
384- break ;
385- }
386-
387- String dir = "" ;
388- if (StrUtil .isNotEmpty (settingService .get ("nginxDir" ))) {
389- dir = " -p " + settingService .get ("nginxDir" );
390- }
417+ return cmd ;
391418
392- if (cmd .equals (settingService .get ("nginxExe" ) + " -s stop" + dir )) {
393- return true ;
419+ case "stopNormal" :
420+ return settingService .get ("nginxExe" ) + " -s stop" + dir ;
421+ case "startNormal" :
422+ return settingService .get ("nginxExe" ) + " -c " + settingService .get ("nginxPath" ) + dir ;
394423 }
395424
396- if (cmd .equals (settingService .get ("nginxExe" ) + " -c " + settingService .get ("nginxPath" ) + dir )) {
397- return true ;
398- }
399-
400- return false ;
425+ return null ;
401426 }
402427
428+ // // 仅执行nginx相关的命令,而不是其他的恶意命令
429+ // private boolean isAvailableCmd(String cmd) {
430+ // // 过滤数据库中的路径
431+ // String nginxPath = ToolUtils.handleConf(settingService.get("nginxPath"));
432+ // settingService.set("nginxPath", nginxPath);
433+ // String nginxExe = ToolUtils.handleConf(settingService.get("nginxExe"));
434+ // settingService.set("nginxExe", nginxExe);
435+ // String nginxDir = ToolUtils.handleConf(settingService.get("nginxDir"));
436+ // settingService.set("nginxDir", nginxDir);
437+ //
438+ // // 检查命令格式
439+ // switch (cmd) {
440+ // case "net start nginx":
441+ // case "service nginx start":
442+ // case "systemctl start nginx":
443+ // case "net stop nginx":
444+ // case "service nginx stop":
445+ // case "systemctl stop nginx":
446+ // case "taskkill /f /im nginx.exe":
447+ // case "pkill nginx":
448+ // return true;
449+ // default:
450+ // break;
451+ // }
452+ //
453+ // String dir = "";
454+ // if (StrUtil.isNotEmpty(settingService.get("nginxDir"))) {
455+ // dir = " -p " + settingService.get("nginxDir");
456+ // }
457+ //
458+ // if (cmd.equals(settingService.get("nginxExe") + " -s stop" + dir)) {
459+ // return true;
460+ // }
461+ //
462+ // if (cmd.equals(settingService.get("nginxExe") + " -c " + settingService.get("nginxPath") + dir)) {
463+ // return true;
464+ // }
465+ //
466+ // return false;
467+ // }
468+
403469 @ Mapping (value = "getLastCmd" )
404470 public JsonResult getLastCmd (String type ) {
405471 return renderSuccess (settingService .get (type ));
0 commit comments