我使用and解析和eval来更改日志记录的日志级别。
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是否是保存下来的?我不知道在这种情况下,选择是否限制了输入。
发布于 2022-02-10 12:11:14
不,不太安全。对于一个知识渊博的恶意用户来说,破解argparse模块以通过CLI传递他们想要的任何东西并不困难。
然而,在这一点上,他们可能只是编写自己的恶意程序,而不是试图使用您的攻击矢量。
即使人们认为eval because r的这种非常特殊的用法是因为它的输入是经过验证的,但在有安全和容易的替代方案(在本例中是getattr)时,故意使用一个暴露巨大攻击面的函数是一个很有问题的决定。
此外,代码库在未来可能会发生变化。卫生化代码可能会被删除或修改),使得eval的使用比以前更容易受到攻击。
无论如何,只需使用getattr。eval几乎不是正确的解决方案。
logging.basicConfig(level=getattr(logging, args.loglevel))https://stackoverflow.com/questions/71064815
复制相似问题