Python eval安全隐患

代码注入等威胁

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()
相关推荐
砚底藏山河2 分钟前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
阿童木写作6 分钟前
跨境电商翻译工具推荐:批量图片翻译+视频字幕实时翻译
人工智能·python·音视频
晶捷软件7 分钟前
晶捷智能:集团型制造企业ERP如何实现多工厂统一管控
大数据·人工智能·python·制造
oyguyteggytrrwwwrt18 分钟前
闵可夫斯基差演示
python
智购科技无人售货机工厂店23 分钟前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
quantdash_cc28 分钟前
量化数据源怎么选:稳定性、实时性和数据完整性到底该如何权衡?
开发语言·python·数据分析·量化交易·股票数据·quantdash
萧瑟余晖36 分钟前
Java深入解析篇五十四之对象模型详解
java·开发语言
hfywmsj1 小时前
广州餐饮铺位招租数据分析:选址权重模型与租金评估实操
人工智能·python·数据分析·广州餐饮铺位招租
张文是假的啊1 小时前
Java | record | Controller逻辑
java·开发语言
cui_ruicheng1 小时前
FastAPI 应用开发(一):FastAPI、路由参数与交互式 API 文档
python·fastapi