大家回想一下,你是不是遇到过这种情况:有时候,你访问一个网站,它突然给你下载了一个东西。特别是当你用 Chrome 的时候,浏览器直接就自动给你下载到“下载”文件夹里面去了,如下图所示:
而大多数时候,你只是把 Chrome 的这个提示关掉了,并没有去主动删除它下载的这个文件。于是这个自动下载的文件就留在了你的“下载”文件夹里面。
你想,我只要不去执行它,就不会有什么问题。但事实真的是这样吗?我们看看下面这张图。
- python3 -m pip install requests
简单又熟悉的命令,我们都执行了无数次。今天却翻车了。电脑被格式化了。
问题出在哪里?问题出在这里:
当我们执行python3 -m pip install xxx的时候,Python 会在你当前运行这个命令的文件夹下面寻找有没有一个叫做 pip.py 的文件。如果有这个文件的话,那么你执行python3 -m pip install xxx相当于执行python3 pip.py install xxx。如果这个pip.py文件里面有恶意代码,那么你就翻车了。
恶意用户如果想攻击 Python 开发者,就可以自己做一个 Python 相关的网站,当用户访问网站的时候,悄悄下载一个 pip.py 到你的电脑上。如果有人碰巧在下载文件夹里面执行了 python3 -m pip install xxx想安装某个库,那么此时就会触发恶意攻击代码,从而让你中招。
特别是遇到不会科学上网的用户,他们直接使用 pip 常常会出现网络超时的问题,于是恶意网站“友好”地给他们提供.whl包的官方下载地址。用户一看,是官方地址,放松了警惕。这样一来,用户用浏览器从官网下载这个包时,正好也是下载到了“下载”文件夹里面。于是很多用户顺理成章地,直接
- cd ~/Downloads
- python3 -m pip install xxx.whl
于是悲剧就发生了。