首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将eval与argparse一起使用?

是否将eval与argparse一起使用?
EN

Stack Overflow用户
提问于 2022-02-10 12:05:29
回答 1查看 61关注 0票数 0

我使用and解析和eval来更改日志记录的日志级别。

代码语言:javascript
复制
parser = argparse.ArgumentParser(
        description="Adds New Location to the Snipe-IT Server")
parser.add_argument('-l', '--loglevel', type=str, default='WARNING', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'])
args = parser.parse_args()
logging.basicConfig(level=eval(f"logging.{args.loglevel}"))

我想知道在这种情况下使用eval是否是保存下来的?我不知道在这种情况下,选择是否限制了输入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-10 12:11:14

不,不太安全。对于一个知识渊博的恶意用户来说,破解argparse模块以通过CLI传递他们想要的任何东西并不困难。

然而,在这一点上,他们可能只是编写自己的恶意程序,而不是试图使用您的攻击矢量。

即使人们认为eval because r的这种非常特殊的用法是因为它的输入是经过验证的,但在有安全和容易的替代方案(在本例中是getattr)时,故意使用一个暴露巨大攻击面的函数是一个很有问题的决定。

此外,代码库在未来可能会发生变化。卫生化代码可能会被删除或修改),使得eval的使用比以前更容易受到攻击。

无论如何,只需使用getattreval几乎不是正确的解决方案。

代码语言:javascript
复制
logging.basicConfig(level=getattr(logging, args.loglevel))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71064815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档