首页 编程 Python 查看内容

python安全开发军规之二:防止中间人攻击

2019-7-1 12:43 |来自: 互联网 1340 0

摘要: 背景 当我们在做开发的时候,很多时候都需要抓取我们收发的数据包,比如android开发的时候,我会在本地打开fiddler,查看app的所有http请求;有的时候为了调试方便,还会修改hosts文件,将某一域名指向特定的IP……在前面两个例子中,其实是中间人攻击(man in the middle attack,简称MITM)两种常用 ...
关键词: 中间人 证书 verify Requests 时候 文件夹 路径 文件 写法 程序

背景

当我们在做开发的时候,很多时候都需要抓取我们收发的数据包,比如android开发的时候,我会在本地打开fiddler,查看app的所有http请求;有的时候为了调试方便,还会修改hosts文件,将某一域名指向特定的IP……在前面两个例子中,其实是中间人攻击(man in the middle attack,简称MITM)两种常用手段,第一种是代理劫持,第二种是DNS劫持,随着网络技术的发展,还出现了很多其它的中间人攻击手段。

普通程序员的写法

程序运行良好,完美地实现了所需要的功能,不是吗?

QA有话说

是的,程序运行得没错?可是代码中有两处安全问题,一是将 verify 设置为 False,使Requests 忽略了对 SSL 证书的验证;二是隐藏了urllib3抛出的证书校验失败的警告。这样做的后果是极有可能被中间人攻击,会话的安全性得不到保障。如果有中间人对通信过程中的数据进行了嗅探和篡改,你的程序却会毫不知情。虽然在开发阶段由于条件限制不能正确配置证书,也不能忽略警告,也不能忽略证书校验。

高级程序员的写法

  • 可以为 verify 传入 CA_BUNDLE 文件的路径,或者包含可信任 CA 证书文件的文件夹路径:

requests.get('https://github.com', verify='/path/to/certfile')

  • 也可以将其保持在会话中:

s = requests.Session()
s.verify = '/path/to/certfile' #如果 verify 设为文件夹路径,文件夹必须通过 OpenSSL 提供的 c_rehash 工具处理。

  • 还可以通过 REQUESTS_CA_BUNDLE 环境变量定义可信任 CA 列表。

本文出处: https://www.toutiao.com/a6706510175496307211/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部