📝 Add security best practice note for subprocess shell execution
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import glob
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
files = glob.glob("*su*.py")
|
||||||
|
print(files)
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
print(f"- {file}")
|
||||||
|
|
||||||
|
# iglob 返回的是一个生成器(Generator)。它采用“惰性求值”,
|
||||||
|
# 只有在你循环遍历它时,它才会去查找下一个文件,极大地节省了内存。
|
||||||
|
print("-" * 100)
|
||||||
|
for file in glob.iglob("*su*.py", recursive=True):
|
||||||
|
print(f"- {file}")
|
||||||
|
|
||||||
|
print("-" * 100)
|
||||||
|
base_dir = Path(".")
|
||||||
|
# 查找所有的 *su*.py 文件(pathlib 默认支持递归用 rglob)
|
||||||
|
for path in base_dir.rglob("*su*.py"):
|
||||||
|
print(f"- {path.name} --> {path.absolute()}")
|
||||||
@@ -43,6 +43,10 @@ if __name__ == "__main__":
|
|||||||
- Shell 内置命令:有些命令(如 Windows 的 dir, copy 或 Linux 的 export)并不是独立的可执行文件,
|
- Shell 内置命令:有些命令(如 Windows 的 dir, copy 或 Linux 的 export)并不是独立的可执行文件,
|
||||||
而是 Shell 的内置命令。如果不设 shell=True,Python 会报错找不到文件。
|
而是 Shell 的内置命令。如果不设 shell=True,Python 会报错找不到文件。
|
||||||
- 通配符展开:比如 "rm *.txt"
|
- 通配符展开:比如 "rm *.txt"
|
||||||
|
|
||||||
|
IMPORTANT:
|
||||||
|
不得不用的情况:如果必须要用 shell=True(比如必须调用系统内置命令),且涉及用户输入,
|
||||||
|
务必使用 shlex.quote()(Linux/macOS)对用户输入进行转义过滤。
|
||||||
"""
|
"""
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
'echo ">>>>>>>>>>>>" && env && echo "<<<Hello World!>>>"',
|
'echo ">>>>>>>>>>>>" && env && echo "<<<Hello World!>>>"',
|
||||||
|
|||||||
Reference in New Issue
Block a user