Skip to content

README里面示例代码有问题 eval(expression) #60

Open
@fivetrees

Description

@fivetrees

eval() 函数非常危险!
eval() 会将传入的字符串作为 Python 代码来执行。如果一个恶意用户发送的不是数学表达式,而是一段恶意的 Python 代码,服务器就会执行它。
举个例子,如果用户发送以下内容:
Generated code
import('os').system('rm -rf /')
Use code with caution.
eval() 会执行 import os,然后执行 os.system('rm -rf /'),这会尝试删除服务器上的所有文件,造成灾难性后果。
如何修复这个安全漏洞?

对于一个计算器功能,绝对不能使用 eval()。应该使用更安全的方法:
使用 ast.literal_eval: 这个函数只能解析 Python 的字面量(字符串、数字、元组、列表、字典等),不能执行函数或操作。但它也无法计算数学表达式(如 1+1)。所以不适用于此场景。
使用安全的数学表达式解析库: 这是最佳选择。比如 numexpr 库。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions