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()
相关推荐
IT爱学堂1 小时前
java版数据结构和算法+AI算法和技能学习指南
java·开发语言
evans在进步2 小时前
LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
java·python·leetcode
淼澄研学2 小时前
Python结合大模型挖掘搜题长尾关键词实操指南
开发语言·python
FfHUCisI2 小时前
Golang - 信号量模式(Semaphore Pattern)
开发语言·后端·golang
m0_547486662 小时前
《Java程序设计与实践 》全套PPT课件2026
java·开发语言
中科高级技工学校3 小时前
乌鲁木齐美术艺考技校实践分享
人工智能·python
灵析表格3 小时前
灵析表格财务函数深度实用性分析与实操教程
开发语言·ai·json·excel·wps
CodeBlog-star4 小时前
LLM能力与边界:多模态、幻觉、上下文窗口及开源模型对比
人工智能·python·开源·llm
COOLMO研究AI4 小时前
Python 如何实现 AI API 的动态路由与多通道负载均衡:多账号与多供应商的高可用调度
人工智能·python·负载均衡