【发布时间】:2023-03-13 01:36:01
【问题描述】:
我正在制作一个 irc 机器人 https://github.com/mouuff/MouBot
当消息以 !math 开头时,我希望机器人回复 eval()
但是如果用户输入类似 !math exit() 之类的东西,它会创建失败
【问题讨论】:
-
请在此处包含代码的相关部分。或者,如果您真的只是在寻找一个没有功能的简单
eval,ast.literal_eval应该可以解决问题。 -
"safe eval" - 多么美妙的矛盾修饰符... ..(或者至少有某种形式的访问控制 - (相当于蛋滴上的所有者级别)所以只有那些已经把事情搞砸的人才能这样做)。如果您只想要“!math” - 然后查看
pyparsing及其计算器示例之一,它可以解析字符串并在必要时返回结果 -
没有安全评估之类的东西
-
即使你有一个安全的评估(在某种意义上说用户不能做任何明显的黑帽),你也必须处理有人输入
9**9**9的情况,这大约是 4.2812477317574708e+369693099。 Python 会很高兴地尝试计算所有的数字,而且还有很多其他的 DOS 攻击向量都是这种方式。走AST的时候用心注意这些是可以处理的,但是很头疼。