Python:使 eval 安全[重复]

2024-02-03

我想要一种简单的方法来在 Python 中执行“计算器 API”。

现在我不太关心计算器将支持的确切功能集。

我希望它接收一个字符串,比如说"1+1"并返回一个带有结果的字符串,在我们的例子中"2".

有没有办法制作eval这样的事情安全吗?

首先我会做

env = {}
env["locals"]   = None
env["globals"]  = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None

eval(users_str, env)

这样调用者就不能弄乱我的局部变量(或看到它们)。

但我确信我在这里监督了很多事情。

Are eval的安全问题是可以解决的,还是有太多微小的细节无法使其正常工作?


eval 的安全问题可以修复吗? 是不是有太多小细节 让它正常工作?

肯定是后者——聪明的黑客总能找到绕过你的预防措施的方法。

如果您对仅使用基本类型文字的纯表达式感到满意,请使用ast.literal_eval http://docs.python.org/library/ast.html?highlight=literal#ast.literal_eval——就是这个目的!对于任何更高级的东西,我推荐一个解析包,例如ply http://www.dabeaz.com/ply/如果您熟悉并熟悉经典的 lexx/yacc 方法,或者py解析 http://pyparsing.wikispaces.com/一种可能更Pythonic的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:使 eval 安全[重复] 的相关文章

随机推荐

  • 将 MutationGroup 流式传输到 Spanner 中

    我正在尝试使用 SpannerIO 将 MutationGroups 流式传输到扳手中 目标是每 10 秒写入新的 MuationGroup 因为我们将使用 Spanner 来查询近期 KPI 当我不使用任何 Windows 时 出现以下错
  • 我怎样才能记住所有CSS简写?

    我从未忘记并且总是使用速记margin and padding因为它是顺时针运行的 但是你怎么记得其他的呢 你是否尽可能使用 CSS 简写 记住不同简写的最佳方法是什么 Update 我还发现了 2 个很好的速记备忘单 Png http w
  • IntelliJ IDEA 在调试时停留在“收集数据”

    我正在使用 IntelliJ IDEA 来调试远程 tomcat 应用程序 之前效果很完美 然而 最近一段时间 它总是卡在 收集数据 上 尽管数据很小 我在这个网站上搜索过 并尝试过 Intellij IDEA在调试模式下非常慢 在正常模式
  • Autofac SingleInstance 不工作

    我正在尝试获得一个与 Autofac 一起使用的 Singleton 实例 我正在用 Winforms 做一个准 mvvm 类型的事情 只是一个实验 所以不要挂断它 但我正在尝试让我的模型成为单个实例 并在命令中引用 此处的 IComman
  • 如何使用Python套接字发送SIP消息

    我需要使用 Python 套接字发送 SIP 消息 我已经让客户端向服务器发送一些内容 但我无法让客户端向服务器发送 SIP 消息 INVITE usr bin python import socket R IP 192 168 2 1 R
  • 尝试读取在 Python 中创建的对象并传递到 C++ 端的 std::vector 然后返回到 Python 时出现访问冲突

    在 Windows 10 上使用 VS 2019 Python 3 7 64 位和 pybind11 2 4 3 时 我遇到了以下问题 当我使用 pybind11 创建对象时py class 在 Python 端并将其直接传递给 C 端的方
  • 使用 Jackson 将 json 转换为对象

    我必须使用 jackson 将 json 转换为对象 类是这样的 class Country int a int b 我得到的 json 是 country a 1 b 1 但是当我尝试反序列化它时 它给了我以下错误 org codehau
  • 如何获取使用 FileSystemWatcher 创建的新文件的名称?

    我正在使用 FileSystemWatcher 监视文件夹 如果我将文件下载到那里 如何获取该下载文件的名称 例如 如果我下载了一个名为 TextFile txt 的文件 我将如何让它以字符串形式返回该文件 我假设这适用于所有四个触发器 更
  • 将颜色属性从 xaml 绑定到 c#

    我正在尝试将自制控件的属性从我的视图绑定到我的视图模型 当我将颜色直接绑定到 xaml 中的另一个元素时 它可以工作 但是当我尝试将它绑定到我的视图模型中的属性时 财产没有变化 xaml
  • 我们如何反转十六进制颜色代码?

    我的 Web API 将发送我的视图的背景颜色 背景颜色范围从白色开始 ffffff变黑 000000 所以我无法为我的信息文本设置任何固定文本颜色 设置文本颜色的最佳方法是什么 我正在考虑反转背景颜色并将其设置为我的文本颜色 但我不知道如
  • 如何复制带有子文件夹的文件夹? [复制]

    这个问题在这里已经有答案了 该脚本在 PowerShell 中完美运行 它复制具有特定类型的所有文件 但我想用它的文件夹和子文件夹复制文件 dest C example files Get ChildItem Path C example
  • 如何在参数化测试中测试异常?

    在 JUnit4 中 您可以通过在一个方法中提供参数集合来编写参数化单元测试 这些参数集合将传递给测试的构造函数并在另一种方法中进行测试 如果我有一个参数希望抛出异常 我该如何指定它 这就是我如何使用带有预期异常的 junit 参数化测试
  • 在 Eclipse 中更改字体大小的键盘快捷键?

    通过首选项更改 Eclipse 中的字体大小相对简单 并在本论坛中回答过多次 However I d like to change font size quickly e g with Ctrl and Ctrl like in Linux
  • 为什么在编译依赖于 .NET Standard 的 .NET Framework 项目时缺少此 NuGet 依赖项?

    我有一个 Visual Studio 解决方案 有 3 个项目 顶层是 NET Framework 4 6 1 控制台应用程序 项目 A 它依赖于 NET Framework 4 6 1 类库 项目 B 项目 B 依赖于 NET Stand
  • 一次在文件系统上执行多个操作的正确方法是什么?

    假设我想知道一个文件是否存在 如果它是一个目录 则另外检索它的内容 我可能会这样走 browseSimple FilePath gt IO Either FilePath FilePath browseSimple x do isAvail
  • Apache 与 Angular2 - 404 未找到

    我已经使用 Bitnami 映像在 AWS 服务器上部署了 Angular2 应用程序 该应用程序由 Apache 提供服务 在端口 8080 上配置了虚拟主机 只要我从index html 如果我想访问不同的页面 已在RouteConfi
  • 检测 Windows 和 Linux 上的操作系统和 Java

    我有一个基于 Maven 的 JavaFX 项目 我想在 Windows 和 Linux 上构建 Maven 项目 为了在部署捆绑包时自动化该过程 我想自动检测操作系统 在 Windows 中我有这样的配置
  • 计算过滤列中有多少个不同值(或获取不同值列表)

    有没有办法计算一个数组中不同值的数量filteredExcel 中的列 使用公式https exceljet net formula count unique values in a range with countif https exc
  • 如何从异步方法获取button_ClickEvent中的字符串

    我的朋友们 我有以下代码 public static CookieContainer cookies public static HttpWebRequest GetNewRequest string targetUrl CookieCon
  • Python:使 eval 安全[重复]

    这个问题在这里已经有答案了 我想要一种简单的方法来在 Python 中执行 计算器 API 现在我不太关心计算器将支持的确切功能集 我希望它接收一个字符串 比如说 1 1 并返回一个带有结果的字符串 在我们的例子中 2 有没有办法制作eva