Open
Description
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
Labels
No labels