【发布时间】:2014-11-30 04:51:06
【问题描述】:
我正在为模拟器开发一个界面,该界面旨在对喜欢命令行而不是 GUI 的人友好。为了给模拟器提供关卡,用户将信息输入到一个文件中,然后对其进行解析并生成设计点,然后将其发送到主服务器。
我希望能够实现某种“范围”功能,以便用户无需输入所有单独的级别。比简单的加法序列需要更多的功率。由于解析器和相关代码已经在 Python 中,这似乎是列表推导的完美用例。但是,列表理解是用户输入,不能保证有效。使用eval 似乎太危险了,而且literal_eval 不支持列表推导。
我目前的目标是让这样的事情有效且安全:
{"Factor 1": [1,2,3,7,8],
"Factor 2": "[2**x for x in range(5,20) if (x % 3) == 0]"}
用户键入的文件的基本格式是 JSON。我希望扩展语言以具有附加功能(如range)来满足各种用户需求。 “数据集1”可以在现有系统中解析。列表解析将在用户的机器上进行评估,所以像'x'*9**999999**99999 这样的简单攻击是自毁的。
使用正则表达式清理range 函数似乎相对容易,但我不确定如何确保其他部分是安全的。正则表达式是否足以完成这项任务,还是我应该遵循另一种方法?
【问题讨论】:
-
您写的问题有点令人困惑-您是否在本地计算机上评估 Python 代码,并将结果发送到服务器?还是将代码发送到服务器,让服务器完成繁重的工作?
-
看起来像python代码,用户输入python代码吗?如果是这样,它必须由 python 解析器解析。通常,您不会让用户输入要评估的代码。
-
它并不干净,但如果您希望用户插入简单的列表推导,如果它们执行过多,您可以阻止它们:link
-
@sln 列表理解本身不是 Python 代码。我使用这种结构是因为我的用户很熟悉它,而且我希望它易于解析。
-
@CraigOtis 用户键入的文件指定模拟的因素和水平。客户端机器将完成生成设计点的工作,然后将其发送到服务器。模拟本身发生在服务器上。
标签: python regex simulation list-comprehension sanitization