如何根据参数安全地编写目录删除代码?
How to safely code directory delete based on parameter?
我有一个编排多个进程的脚本,所有进程都在参数文件中定义的位置创建日志(即与脚本分开)。在 运行 进程之前,脚本会清空日志位置,例如
rem LOGLOC is loaded from a parameter file
Del /F /Q /S %LOGLOC%\*.*
显然非常危险。如果出于任何原因错误地定义了 LOGLOC,这可能是灾难性的。我修改了脚本以增加一些安全性...
if "%LOGLOC%" equ "" (
ECHO FATAL ERROR: LOGLOC not defined
exit /b 1
)
Del /F /Q /S %LOGLOC%\*.*
...但不考虑 LOGLOC 可能被意外定义为 '.'
或 '..'
.
的情况
在以潜在有害的方式使用参数之前,是否有更好的检查模式?
编辑:我正在按照 Fejese 的建议添加以下验证规则。
- 检查它的长度至少为 4 个字符,例如C:\L
- 验证 A-Z 中的字符 1
- 验证字符 2,3 = :\
- 验证路径是否存在并且是一个目录
如果我能弄清楚这些,我会 post 结果,但感谢 Fejese 为我指明了正确的方向...
除非您设置一些规则,否则脚本无法判断获取的参数是否安全。
- 您可以在脚本中硬编码一个必须匹配的前缀。
- 例如,您可以将删除模式限制为仅删除日志文件。
我有一个编排多个进程的脚本,所有进程都在参数文件中定义的位置创建日志(即与脚本分开)。在 运行 进程之前,脚本会清空日志位置,例如
rem LOGLOC is loaded from a parameter file
Del /F /Q /S %LOGLOC%\*.*
显然非常危险。如果出于任何原因错误地定义了 LOGLOC,这可能是灾难性的。我修改了脚本以增加一些安全性...
if "%LOGLOC%" equ "" (
ECHO FATAL ERROR: LOGLOC not defined
exit /b 1
)
Del /F /Q /S %LOGLOC%\*.*
...但不考虑 LOGLOC 可能被意外定义为 '.'
或 '..'
.
在以潜在有害的方式使用参数之前,是否有更好的检查模式?
编辑:我正在按照 Fejese 的建议添加以下验证规则。
- 检查它的长度至少为 4 个字符,例如C:\L
- 验证 A-Z 中的字符 1
- 验证字符 2,3 = :\
- 验证路径是否存在并且是一个目录
如果我能弄清楚这些,我会 post 结果,但感谢 Fejese 为我指明了正确的方向...
除非您设置一些规则,否则脚本无法判断获取的参数是否安全。
- 您可以在脚本中硬编码一个必须匹配的前缀。
- 例如,您可以将删除模式限制为仅删除日志文件。