如何限制sklearn数据集下载并修复Creosote检测出的潜在漏洞?
限制sklearn自动下载数据集的方案
- 代码层面禁用自动下载:调用sklearn的
fetch_*系列数据集函数时,显式设置download_if_missing=False,本地无对应数据集时会直接抛出异常,不会触发自动下载。示例代码:from sklearn.datasets import fetch_california_housing # 禁止自动下载,本地无数据则报错 data = fetch_california_housing(download_if_missing=False) - 全局配置禁用下载:在项目启动时添加全局配置代码,关闭所有数据集的自动下载功能:
from sklearn import set_config # 全局禁用数据集自动下载 set_config(download=False) - 预加载本地数据集:提前从可信渠道下载好所需数据集,放到指定目录后,设置环境变量
SKLEARN_DATASET_HOME指向该目录,sklearn会优先读取本地文件,不再触发下载。
Linux/macOS终端设置命令:
Windows系统直接在系统环境变量中添加对应路径即可。export SKLEARN_DATASET_HOME="/path/to/your/local/datasets"
修复tarfile相关漏洞的具体步骤
- 升级Python到安全版本:2022年的tarfile路径遍历漏洞已在Python的安全更新中修复,直接升级到以下版本即可:Python 3.8.16+、3.9.16+、3.10.9+、3.11.1+。
- 升级scikit-learn到修复版本:scikit-learn针对该漏洞做了适配,升级到1.1.3及以上版本后,会在数据集下载和提取过程中添加路径校验,防止恶意tar包的路径遍历攻击。执行升级命令:
pip install --upgrade scikit-learn>=1.1.3 - 禁用不可信数据源:生产环境中绝对禁止从非官方、未验证的第三方源下载数据集,只使用scikit-learn官方提供的数据集,或提前验证过的本地数据集文件。
- 扫描验证修复效果:用Creosote工具重新扫描虚拟环境,确认
sklearn/datasets相关的漏洞提示已消失,确保修复生效。
内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire
相关产品推荐
相关产品推荐

