python3 安全问题,os.system('wget...') 与 urllib.request.urlopen(...)
python3 security question, os.system('wget...') vs urllib.request.urlopen(...)
今天我在无头驱动的打印服务器 (RaspPi / python3) 中遇到了一个奇怪的行为。
我需要从 Web 服务器下载 PDF 或呈现的 python 脚本。
直到现在我确实使用了:
src = "https://ssl.server.tld/path/to/file.pdf"
target = "/path/to/saved.pdf"
os.system("wget -O "+target+" "+src)
从现在开始我使用:
with urllib.request.urlopen(src) as response, open(target, 'wb') as out_file:
data = response.read()
out_file.write(data)
问题如下:
几天后,SSL 证书显然已过时。
os.system()
版本抛出 NON-PYTHON ERROR
https://ssl.***.de/config_page.py
Auflösen des Hostnamen »ssl.***.de (ssl.***s.de)«... 176.***.***.10
Verbindungsaufbau zu ssl.***.de (ssl.***.de)|176.***.***.10|:443... verbunden.
FEHLER: Dem Zertifikat von »ssl.***.de« wird nicht vertraut.
FEHLER: Das Zertifikat von »ssl.***.de« ist abgelaufen.
正如我提到的,没有 python 错误或异常,正在下载我想要的文件,但大小为 0 字节。只有调试器在控制台输出中显示上面引用的文本。
urllib
版本按预期运行,没有错误,没有控制台输出,并且文件正确。
我错过了什么?这是 os.system()
的特殊安全行为吗?
感谢您的回答。
如您所知,wget
正在验证证书,而 urlopen
没有。
如果您希望 wget
跳过检查证书,请添加参数 --no-check-certificate
今天我在无头驱动的打印服务器 (RaspPi / python3) 中遇到了一个奇怪的行为。
我需要从 Web 服务器下载 PDF 或呈现的 python 脚本。 直到现在我确实使用了:
src = "https://ssl.server.tld/path/to/file.pdf"
target = "/path/to/saved.pdf"
os.system("wget -O "+target+" "+src)
从现在开始我使用:
with urllib.request.urlopen(src) as response, open(target, 'wb') as out_file:
data = response.read()
out_file.write(data)
问题如下:
几天后,SSL 证书显然已过时。
os.system()
版本抛出 NON-PYTHON ERROR
https://ssl.***.de/config_page.py
Auflösen des Hostnamen »ssl.***.de (ssl.***s.de)«... 176.***.***.10
Verbindungsaufbau zu ssl.***.de (ssl.***.de)|176.***.***.10|:443... verbunden.
FEHLER: Dem Zertifikat von »ssl.***.de« wird nicht vertraut.
FEHLER: Das Zertifikat von »ssl.***.de« ist abgelaufen.
正如我提到的,没有 python 错误或异常,正在下载我想要的文件,但大小为 0 字节。只有调试器在控制台输出中显示上面引用的文本。
urllib
版本按预期运行,没有错误,没有控制台输出,并且文件正确。
我错过了什么?这是 os.system()
的特殊安全行为吗?
感谢您的回答。
如您所知,wget
正在验证证书,而 urlopen
没有。
如果您希望 wget
跳过检查证书,请添加参数 --no-check-certificate