代码注入等威胁
1、锁屏
python
import os
print(os.system('rundll32.exe user32.dll,LockWorkStation'))
2、eval注入风险
python
import ast
import re
import platform
def get_lock_command():
"""根据当前操作系统返回对应的锁屏命令"""
os_type = platform.system()
if os_type == "Windows":
# Windows 锁屏命令
return "rundll32.exe user32.dll,LockWorkStation"
elif os_type == "Linux":
# Linux GNOME桌面环境锁屏命令
return "gnome-screensaver-command -l"
elif os_type == "Darwin":
# macOS 锁屏命令
return "pmset displaysleepnow"
else:
return "echo 不支持的操作系统"
def test_safe_eval():
print("=" * 50)
print("1. 危险操作:使用 eval()")
print("=" * 50)
# 正常输入
normal_input = "1 + 2 * 3"
print(f"输入: '{normal_input}'")
print(f"eval 结果: {eval(normal_input)}")
# 恶意输入(修改为锁屏指令)
lock_cmd = get_lock_command()
malicious_input = f"__import__('os').system('{lock_cmd}')"
print(('echo你的电脑已被黑客控制!'))
print(f"\n输入: '{malicious_input}'")
try:
#警告:这行代码会真的执行系统锁屏命令!
eval(malicious_input)
except Exception as e:
print(f"执行出错: {e}")
print("\n" + "=" * 50)
print("2. 安全替代方案:使用 ast.literal_eval()")
print("=" * 50)
# 正常输入(注意:它只能解析Python的字面量,不能做数学运算)
safe_input = "{'name': 'Alice', 'age': 25}"
print(f"输入: '{safe_input}'")
try:
result = ast.literal_eval(safe_input)
print(f"literal_eval 结果: {result} (类型: {type(result).__name__})")
except Exception as e:
print(f"执行出错:{e}")
# 恶意输入
print(f"\n输入: '{malicious_input}'")
try:
ast.literal_eval(malicious_input)
except ValueError as e:
print(f"拦截成功!报错信息: {e}")
print("\n" + "=" * 50)
print("3. 如果需要计算数学表达式怎么办?")
print("=" * 50)
math_expr = "1 + 2 * 3"
print(f"输入: '{math_expr}'")
# 使用正则表达式进行严格白名单校验
# 只允许数字、加减乘除、小数点和空格
if re.match(r'^[\d\s\+\-\*\/\.]+$', math_expr):
# 校验通过后,再使用 eval 就是安全的
print(f"正则校验通过,eval 结果: {eval(math_expr)}")
else:
print("包含非法字符,拒绝执行!")
if __name__ == "__main__":
test_safe_eval()