docker + 扫描器 == 蜜汁Bug?
2017-8-29 20:50:51 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

为了方便分布式,扫描器的运行环境用Dockerfile编译的。测试的时候是mac + python3.5.3,本地测试完成上线(docker ubuntu + python3.5.2)后,发现报错(下图为部分报错信息):

似乎是因为URL里有中文,才导致的转码失败。但老夫已经聊发少年狂,从Python2 切换到了 Python3,为何还会有这种错误?!

为了方便测试,把报错的代码单独拉出来,如下:

但在复现漏洞的时候,发现漏洞只能在docker的运行环境里复现,mac + python3.5.3 和 ubuntu + python 3.5.2都不存在问题。

一番搜索之后,找到了问题所在:

在mac下执行同样的命令:

Python 的编码问题一直饱受诟病。虽然在Python3的版本做了一些变动,默认编码形式由 ASCII 改为 utf-8。但在与操作系统底层进行交互(subprocess.Popen)的时候,还是会调用系统的编码。而我们传进去的中文是以 utf-8 进行编码的,在docker运行环境里,系统默认编码为 ANSIX_X3.4-1968,所以导致了解码错误。

解决方案:

1)从dockerfile编译镜像的时候指定系统编码

2)给subprocess传参的时候,先转码为bytes格式(绕过系统的编码转换过程)

参考资料:

https://www.binss.me/blog/solve-problem-of-python3-raise-unicodeencodeerror-when-print-utf8-string/

https://askubuntu.com/questions/581458/how-to-configure-locales-to-unicode-in-a-docker-ubuntu-14-04-container

http://www.jianshu.com/p/5682a0e0a9ba


文章来源: https://mp.weixin.qq.com/s?__biz=MzU4NjIxNzkyNQ==&mid=2247483689&idx=1&sn=d4b433b5014e3d55db7a5eea2d61a6f2&chksm=fdffe183ca886895d8e6d149513c52458151306e51c6daefb8a9da2280c02ac15a2f1db7d630&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh