Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何清理用户给出的列表理解?_Python_Regex_Simulation_List Comprehension_Sanitization - Fatal编程技术网

Python 如何清理用户给出的列表理解?

Python 如何清理用户给出的列表理解?,python,regex,simulation,list-comprehension,sanitization,Python,Regex,Simulation,List Comprehension,Sanitization,我正在为模拟器开发一个界面,该界面对喜欢命令行而不是GUI的人来说是友好的。为了给模拟器提供级别,用户将信息输入到一个文件中,然后对该文件进行解析并生成设计点,然后将其发送到主服务器 我希望能够实现某种“范围”功能,这样用户就不需要输入所有的单独级别。比简单的加法序列需要更多的能量。由于解析器和相关代码已经在Python中,这似乎是列表理解的完美用例。但是,列表理解是用户输入的,不能保证有效。使用eval似乎太危险,而且literal\u eval不支持列表理解 我目前的目标是让这样的东西有效且

我正在为模拟器开发一个界面,该界面对喜欢命令行而不是GUI的人来说是友好的。为了给模拟器提供级别,用户将信息输入到一个文件中,然后对该文件进行解析并生成设计点,然后将其发送到主服务器

我希望能够实现某种“范围”功能,这样用户就不需要输入所有的单独级别。比简单的加法序列需要更多的能量。由于解析器和相关代码已经在Python中,这似乎是列表理解的完美用例。但是,列表理解是用户输入的,不能保证有效。使用
eval
似乎太危险,而且
literal\u eval
不支持列表理解

我目前的目标是让这样的东西有效且安全:

{"Factor 1": [1,2,3,7,8],
"Factor 2": "[2**x for x in range(5,20) if (x % 3) == 0]"}
用户键入的文件的基本格式是JSON。我希望扩展该语言,使其具有附加功能(如
范围
),以满足各种用户需求。“数据集1”可以在现有系统中解析。列表理解将在用户的机器上进行评估,因此像
'x'*9**999999**99999
这样的简单攻击是自毁的


使用正则表达式清理
范围
函数似乎相对容易,但我不确定如何确保其他部分是安全的。正则表达式是否足以完成这项任务,或者我是否应该遵循另一种方法?

进一步的分析似乎表明,
eval
比通常的方法危险性更小。解析都是在客户端完成的,项目的代码是开源的。因此,用户通过利用
eval
所做的任何恶意行为都是自毁性的,也可能是通过不太复杂的方法实现的。因此,我可以使用
eval
生成级别列表


当然,由于大多数人(包括我自己)对它的使用都有“eval是邪恶的;用火杀死它”的反应,我将不得不大量记录这一决定。

您的书面问题有点令人困惑-您是否在本地计算机上评估Python代码,并将结果发送到服务器?或者将代码发送到服务器,让服务器完成繁重的工作?看起来像python代码,用户是否输入python代码?如果是这样,它必须由python解析器解析。一般来说,您不会让用户输入要规避的代码。这并不干净,但如果您希望用户插入简单的列表理解,那么如果它们在执行时花费太多,您可以阻止它们:@sln列表理解本身不是Python代码。我之所以使用这种结构,是因为我的用户对它很熟悉,我希望它能够很容易地解析用户类型为模拟指定因子和级别的文件。客户机将完成生成设计点的工作,然后将设计点发送到服务器。模拟本身发生在服务器上。