gpt4 book ai didi

python - 如何保护自己免受 gzip 或 bzip2 炸弹的伤害?

转载 作者:IT老高 更新时间:2023-10-28 21:02:55 29 4
gpt4 key购买 nike

这与问题about zip bombs有关,但要考虑 gzip 或 bzip2 压缩,例如接受 .tar.gz 文件的 Web 服务。

Python 提供了一个方便的 tarfile module使用起来很方便,但似乎不能提供针对 zipper 炸弹的保护。

在使用 tarfile 模块的 python 代码中,检测 zip 炸弹最优雅的方法是什么,最好不要从 tarfile 模块复制太多逻辑(例如透明解压缩支持)?

而且,只是为了让它不那么简单:不涉及真正的文件;输入是一个类似文件的对象(由网络框架提供,代表用户上传的文件)。

最佳答案

您可以使用 resource module限制您的进程及其子进程可用的资源。

如果您需要在内存中解压缩,那么您可以设置 resource.RLIMIT_AS(或 RLIMIT_DATARLIMIT_STACK),例如,使用上下文管理器自动恢复到以前的值:

import contextlib
import resource

@contextlib.contextmanager
def limit(limit, type=resource.RLIMIT_AS):
soft_limit, hard_limit = resource.getrlimit(type)
resource.setrlimit(type, (limit, hard_limit)) # set soft limit
try:
yield
finally:
resource.setrlimit(type, (soft_limit, hard_limit)) # restore

with limit(1 << 30): # 1GB
# do the thing that might try to consume all memory

如果达到限制; MemoryError 引发。

关于python - 如何保护自己免受 gzip 或 bzip2 炸弹的伤害?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622706/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com