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()
相关推荐
云和数据.ChenGuang6 分钟前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
专注仿真25 分钟前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy11 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫121 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
wflynn1 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
2601_967980112 小时前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包
心疼你的一切2 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog3 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
中科三方3 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
卡提西亚4 小时前
FastAPI基础入门
python·fastapi