长亭百川云 - 文章详情

docker + 扫描器 == 蜜汁Bug?

安全小黄鸭

36

2024-07-14

为了方便分布式,扫描器的运行环境用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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2