阿里云出现源代码泄露企业 涉及万科等40家企业200余项目_代码被分享到第三方平台案例-程序员宅基地

技术标签: 阿里云  科技资讯  

 

本文来自铅笔道电子烟论坛:铅笔道 

记者 | 付艳翠

编辑 | 吴晋娜

人工智能学习路线+实战训练

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

在阿里云云效平台上,只要登上账号,就能浏览到很多公司的“内部”代码。

““能造成多大损失,那就要看你的想象力了。”说完,张中南通过微信发来几张用户手持身份证的照片。照片中,隐约可以看到用户的个人信息。这是张中南在阿里云公共代码托管平台上,浏览到的万科集团的用户“内部资料”。

张中南是一位网络安全方面的爱好者,同时也是上海一家科技公司的后端工程师。

近日,他向铅笔道爆料,半年前他发现,由于阿里云代码托管平台的项目权限设置存在歧义,导致开发者操作失误,造成至少40家以上企业的200多个项目代码泄露,其中涉及到万科集团、咪咕音乐、51信用卡旗下51足迹、百度无人车合作伙伴ecarx等知名企业,问题至今未完全解决。

面对可能会引发的一系列难以想象的网络安全灾难,这位工作不到3年、年仅24岁的小伙子,有些不知所措。期间,他曾怀着忐忑的心情,一边怕惹上官司,一边又自己通过电邮、微信等方式联系了其中的十余家公司。

他本寄希望于阿里云平台能帮忙一次性解决掉这些公司的安全隐患,经过多次沟通,他却发现依旧徒劳,让他百思不得其解的是,“阿里云只要向企业发个邮件、打个电话就能解决,有那么难吗?”

 

注:本文内容主要来自铅笔道记者采访和网络公开信息,论据难免偏颇,不存在刻意误导。

 

发现了“不得了”的秘密

 

近日,作为网络安全方面的爱好者,上海一家科技公司的后端工程师张中南向铅笔道吐露了半年以来的这段经历。

 

去年8月下旬的一天,他在网上看到阿里云在推广云效平台,还出了一本书叫《阿里巴巴Java开发手册》。抱着学习的心态,他注册了一个阿里云平台账号。

 

“我是一个ruby工程师,java和php都是半吊子。在这里,我就像打开了新世界的大门。”他意外地发现,在阿里云效平台上,只要登上账号,能浏览到很多公司的“内部”代码。

 

最初,张中南以为这些代码是开源的。这个发现,让他在最初感到非常欣喜。“这些项目大多数是用java和php写的,看企业里面真正的项目,要比自己看书摸索要真实一些。”

 

然而,张中南很快发现了“不对劲”的地方,这些代码内容很多都是不该出现在开源项目中的。比如,项目的数据库、账号、密码等。为此,抱着测试一下的态度,张中南登录了这些账号和密码。

 

张中南震惊地发现,竟然真的能见到一些公司生产环境的具体数据。虽然离最初发现时已过去半年,但他如今描述时还是感到难以置信。“这其中的很多企业,竟把数据库也抛在公网上,任凭谁,只要按照里面记录的账号密码登录,就能访问。

 

一番研究过后,张中南猜测,之所以出现这种情况,可能是因为这些公司的程序员在给项目建库时操作不当,将项目权限设置成“平台公开”。

 

张中南解释,因为当时的阿里云代码托管业务还是全英文平台,可能很多企业在创建项目的时候会误选择“internal”,也就是“平台公开”。

 

他认为,“internal”的意思得因人而异。“如果是个人在使用代码托管,那么‘internal’的意义非常明确,就是使用这个平台的人都能访问。但如果是企业在使用代码托管,那么‘internal’的意义是‘对企业内的用户都公开’还是‘使用这个代码托管平台的人都能访问’呢?”

目前,阿里云云效平台建库操作页面为中文,默认权限为“私有”。

 

他开始担心,“如果这些信息被人发现并利用,迟早有一天要出事

 

张中南用一些他发现在阿里云平台上出现代码泄露的企业举例。比如,中国移动旗下咪咕音乐,泄漏后端代码及配置数据,包括访问高清曲库接口的密钥,访问中央音乐平台总线接口的密钥,支付密钥等。黑客可以根据代码逻辑和支付密钥,伪造支付成功请求。

 

又如,由金正大集团发起并控股的,由世界银行集团国际金融公司、华夏银行共同参与的金丰公社,泄漏代码为电商后端和CMS。其阿里云oss访问密钥也泄漏,该密钥可以访问金丰公社生产环境的文件系统,包括用户上传的图片和资源、内部系统的报表、服务器日志等。黑客如果用恶意app和网页替换掉oss中的原有项目,用户通过金丰公社升级app或访问特定页面时,便会被劫持。

 

还有,基于微信的教育应用服务平台浙江小虫科技,泄漏代码为服务器监控中间件,代码中暴露出高权限生产环境数据库账号,可以直接登录查看线上数据。尝试登录阅览,其中一个数据库存储了36万条中小学生的姓名、手机号和学校。如果泄漏,后果不堪设想。

 

张中南通过电话联系了对方创始人,对方很快将代码泄漏情况全部处理。事后,张中南表示:“想想还蛮开心的,今天保护了几十万个小孩子的隐私。”

 

此外,上海图聚智能科技有限公司的客户已经包括全国数百家医院和商场,以及高德地图等,它的代码近乎全部泄露。张中南称:“且不说其辛苦运营的数据如果被竞争对手全数获取会怎样,试想如果黑客把数据库中合作医院的地址改为某个‘不作为’的医院,后果也不堪设想。

 

张中南介绍,虽然万科集团泄露代码不多,但生产环境oss密钥泄漏了出来。该密钥权限非常大,可以访问整个万科集团的线上oss,包括购房客户上传的身份证,各地销售人员报表等。而这些信息,对黑客来说,无疑是一个宝库。

 

感性战胜理智

 

知道了“代码秘密”的张中南,在接下来的几天,开始陷入是否要通知这些企业的犹豫中。“之所以犹豫,是因为之前世纪佳缘网白帽子事件。”

 

世纪佳缘网白帽子事件发生在2015年12月,在2016年6月,被白帽子父亲披露。

 

资料显示,知名第三方漏洞平台——乌云网的注册白帽子袁炜,在检测漏洞中发现了世纪佳缘的漏洞,并告诉了世纪佳缘该漏洞。几天后,世纪佳缘确认并修复了该漏洞,同时致谢乌云网和袁炜。

 

但在2016年1月,世纪佳缘报警称有4000余条实名注册信息被不法分子窃取。2016年3月8日,袁炜遭到警方刑事拘留,并于4月12日被批准逮捕。罪名是基于《刑法》285条第2款,入侵获取网络金融证券系统身份认证信息 10 条以上、一般系统 500 条以上,被认为情节严重。

 

虽然担心自己会有和袁炜一样的遭遇,但最终,张中南的感性战胜了理智。

 

在代码泄露的公司中,张中南打算挑一家互联网兼职平台试试水。“之所以选择这家公司,是因为他们有一位看起来很友善的年轻CEO。”

 

2018年9月4日,张中南给这家互联网兼职平台的几位研发人员发送了一封邮件,告知对方公司项目在阿里云托管平台的代码存在安全隐患,并将建议也一并发给对方。

 

张中南回忆,为了害怕有人已经离职,他特地给该公司多个一线研发发送了邮件。

 

张中南给互联网兼职平台发送的邮件截图(张中南提供)。

 

很快,张中南发现,泄露的项目就被“悄悄下掉”了,但他一直没有收到回信,“甚至连声感谢都没有”。

 

迟迟没有回复,也让张中南产生了犹豫。“毕竟当时是鼓起很大勇气才发邮件的,因为怕他们报警。

 

但消沉几天后,张中南还是觉得应该去做些事情,继续将这个发现告诉涉事公司。

 

这次,张中南找到了比邮件更好的方法:通过代码提交的记录,直接添加开发者的微信,再向他们告知。

 

前后忙活了十余个公司,效果还不错。但在联系这些公司人员时,大家其实一开始还是倾向于怀疑和不信任。”张中南感受到。

 

 

张中南联系泄露公司时的对话截图(张中南提供)。

 

这也让张中南开始期望与这些公司对话,引起公司上层重视。之后,张中南通过网站留言的方式,联系了代码同样泄露了的上海某科技公司。

 

“第二天,公司CTO就打来电话道谢。”说到这里,张中南显然很开心。因为他认为,这也证明他这么做下去是值得的。

 

多次沟通,问题未解

 

在11月底,张中南在和其哥哥通电话时,说了他正在做的事情。但之后其哥哥了解了情况后,专程给张中南打电话劝他不要管了,因为这种做法法律风险很大。

 

在考虑了哥哥的意见后,张中南决定找阿里云官方渠道,希望阿里云能够通过平台来解决这件事

 

11月26日晚,张中南将51信用卡在阿里云code上托管的代码项目51足迹app,因为权限配置不当而泄漏的情况告知了云效客服。他并表明,希望阿里云能发个站内信告知这部分公司。

 

 

11月26日,张中南与阿里云客服对话截图(张中南提供)。

 

当时阿里云云效方面表示,张中南反馈的51信用卡旗下51足迹app后台的代码,仓库级别设置为了“internal”,需要通知客户改为“private”的问题,已经关联任务。

 

本以为事情可以圆满得到解决,因为张中南发现,在11月他与平台沟通之后,确实监测不到云效平台上再出现代码泄露项目的新公司了。然而,他发现,在11月之前监测过的代码泄露企业,依旧处于“裸奔”状态,这意味着阿里云并没有通知到代码泄露的企业。

 

今年1月31日,不甘心就这么算了的张中南再次联系了阿里云云效平台,并提供了几个大厂如咪咕音乐、百度无人车合作伙伴ecarx、51信用卡旗下的51足迹的泄露情况,希望事情得到处理。

 

这次,阿里云客服表示:“作为公有云的代码托管,我们无权扫描用户的代码,这一点公有和私有一样,仓库的开放性是用户自主的权利。”也就是说,阿里云作为代码服务平台,无权扫描用户代码。而代码不管是平台公开,还是私有,都是用户的权利。

 

阿里云称,感谢张中南的反馈,会将其反馈到的信息给到其发现的几个仓库的维护者。但同时也建议张中南可以直接通过commit的邮箱与维护者进行提示。

 

 

 

1月31日,张中南与阿里云客服对话截图(张中南提供)。

 

这一次,张中南同样不知道阿里云是否通知了项目方。“虽然不知道阿里云是否联系了这些企业,但上述企业的代码泄露情况依然存在,可见它们并没有接到通知。”

 

在他看来,阿里云这样的知名云服务提供商,应该有告知代码泄露公司的义务。

 

在张中南提供的泄露代码公司的表格里,有28家公司、共235个项目的代码存在泄露风险。这里还不包括张中南此前自己联系过的10余家公司。

 

张中南表示,名单中还漏掉了很多企业,因为他写的爬虫代码不是很好。解析过程中,一些页面解析错误就漏掉了。

 

在此之前,用户数据泄露事件频繁发生,Facebook、Uber、华住、顺丰、万豪、陌陌等企业深陷其中。

 

2018年9月,华住旗下酒店汉庭、桔子、全季等开房数据泄露事件,就是华住程序员将数据库的用户名、密码,上传至公共代码托管平台导致的。据悉,泄露的房客信息包括名字、邮寄地址、邮箱地址、电话号码、护照号码、出生日期、性别、到达和离店信息等,已经构成一种完整意义上的个人大数据。

 

“现在阿里云面对的是几十家企业,几百个项目的代码泄露。而阿里云只要发个邮件、打个电话就能避免,打个电话那么难吗?”对于这个问题,张中南百思不得其解。他认为,阿里云这种不作为行为,会让这件事情有可能变得十分严重。

 

阿里云:权限始终默认“私有”

 

针对网友反应的问题,阿里云云效平台表示:“针对部分用户不那么熟悉此类平台,我们也会展开一些科普与使用规则提醒,确保大家对自己分享的代码有清晰的认知。”

 

为此,铅笔道采访了此前张中南联系过的一家公司,该公司研发人员李杰(化名)表示:“阿里云所说的向用户科普和使用规则,基本能够满足用户正常使用。但因人而异,因为我就没有过多的关注。”

 

李杰继续称,阿里云后来将页面从英文变更为中文,就可以看出它们做了很多优化。“大家都是开发者,对于面向开发者的平台来说,也无须苛求太多。”

 

当时之所以建站出错,李杰回忆,是因为在建站的时候,云效还是全英文平台,他记得当时权限控制默认确实是“internal”,“主要是程序员个人建库的时候疏忽了。”

 

针对李杰所说的云效平台此前默认操作是“平台公开”一事,阿里云云效平台表示:云效平台和github一样,从一开始就是默认的“私有”,但客户可以手动更改,相关的选项也都符合行业的通用规则,且完全由客户自己设置。

 

对此,李杰称,这件事情发生在去年8月份,记忆有些模糊了。在当时,他一共建了3个项目,他在事后特别确认了一遍,当时的3个项目权限全部是平台“公开”的。“我建项目的时候,肯定不会把所有项目,专门都从‘私有’改成‘公开’。”

 

针对云效平台是否默认“私有”一事,张中南则回忆,印象中他开始注意到限制操作设置时已经是默认为“私有”,而更早之前注册并建库的项目开发者操作时是否默认为“公开”,他也不得而知。

 

然而,他认为,即使阿里云云效平台为开发者提供的是免费服务,且从一开始就把限制操作设置为“私有”,在这次泄露事件中也有责任。他认为,一方面,阿里云未能及时优化和解释有歧义的英文权限描述;另一方面,即使云效平台是免费服务平台,也有通知其用户预防风险的义务。

 

“事实上,阿里云被动发现问题后,没有重视问题,也没有提出解决措施。”张中南表示,他之所以选择公开此事,只是想要引起企业对代码安全的关注,同时希望阿里云改善服务流程。(

1月31日,张中南与阿里云客服对话截图(张中南提供)。

 

这一次,张中南同样不知道阿里云是否通知了项目方。“虽然不知道阿里云是否联系了这些企业,但上述企业的代码泄露情况依然存在,可见它们并没有接到通知。”

 

在他看来,阿里云这样的知名云服务提供商,应该有告知代码泄露公司的义务。

 

在张中南提供的泄露代码公司的表格里,有28家公司、共235个项目的代码存在泄露风险。这里还不包括张中南此前自己联系过的10余家公司。

 

张中南表示,名单中还漏掉了很多企业,因为他写的爬虫代码不是很好。解析过程中,一些页面解析错误就漏掉了。

 

在此之前,用户数据泄露事件频繁发生,Facebook、Uber、华住、顺丰、万豪、陌陌等企业深陷其中。

 

2018年9月,华住旗下酒店汉庭、桔子、全季等开房数据泄露事件,就是华住程序员将数据库的用户名、密码,上传至公共代码托管平台导致的。据悉,泄露的房客信息包括名字、邮寄地址、邮箱地址、电话号码、护照号码、出生日期、性别、到达和离店信息等,已经构成一种完整意义上的个人大数据。

 

“现在阿里云面对的是几十家企业,几百个项目的代码泄露。而阿里云只要发个邮件、打个电话就能避免,打个电话那么难吗?”对于这个问题,张中南百思不得其解。他认为,阿里云这种不作为行为,会让这件事情有可能变得十分严重。

 

阿里云:权限始终默认“私有”

 

针对网友反应的问题,阿里云云效平台表示:“针对部分用户不那么熟悉此类平台,我们也会展开一些科普与使用规则提醒,确保大家对自己分享的代码有清晰的认知。”

 

为此,铅笔道采访了此前张中南联系过的一家公司,该公司研发人员李杰(化名)表示:“阿里云所说的向用户科普和使用规则,基本能够满足用户正常使用。但因人而异,因为我就没有过多的关注。”

 

李杰继续称,阿里云后来将页面从英文变更为中文,就可以看出它们做了很多优化。“大家都是开发者,对于面向开发者的平台来说,也无须苛求太多。”

 

当时之所以建站出错,李杰回忆,是因为在建站的时候,云效还是全英文平台,他记得当时权限控制默认确实是“internal”,“主要是程序员个人建库的时候疏忽了。”

 

针对李杰所说的云效平台此前默认操作是“平台公开”一事,阿里云云效平台表示:云效平台和github一样,从一开始就是默认的“私有”,但客户可以手动更改,相关的选项也都符合行业的通用规则,且完全由客户自己设置。

 

对此,李杰称,这件事情发生在去年8月份,记忆有些模糊了。在当时,他一共建了3个项目,他在事后特别确认了一遍,当时的3个项目权限全部是平台“公开”的。“我建项目的时候,肯定不会把所有项目,专门都从‘私有’改成‘公开’。”

 

针对云效平台是否默认“私有”一事,张中南则回忆,印象中他开始注意到限制操作设置时已经是默认为“私有”,而更早之前注册并建库的项目开发者操作时是否默认为“公开”,他也不得而知。

 

然而,他认为,即使阿里云云效平台为开发者提供的是免费服务,且从一开始就把限制操作设置为“私有”,在这次泄露事件中也有责任。他认为,一方面,阿里云未能及时优化和解释有歧义的英文权限描述;另一方面,即使云效平台是免费服务平台,也有通知其用户预防风险的义务。

 

“事实上,阿里云被动发现问题后,没有重视问题,也没有提出解决措施。”张中南表示,他之所以选择公开此事,只是想要引起企业对代码安全的关注,同时希望阿里云改善服务流程。(校对 | 林夕

人工智能如何学?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rx3oyuyi/article/details/87876619

智能推荐

python字符串类型定义_python--字符串类型-程序员宅基地

文章浏览阅读1.2k次。*************** 字符串类型 ***************1.字符串的定义:第一种方式:str1 = 'our company is westos'第二种方式:str2 = "our company is westos"第三种方式:str3 = """our company is westos"""2.转义符号一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符\n:..._python字符串类型定义

计算机图形学和工程图学,计算机图形学与印刷工程我与工程图学及计算机图形学...-程序员宅基地

文章浏览阅读418次。一、我与浙大工程图学一同发展      我国工程图学课程量大面广,从新中国成立以来主要承袭于前苏联,经过50多年的建设、改革和发展,课程体系形成了较明显的中国特色,既不同于欧美,也不同于前苏联。可以分为如下四个发展阶段:第一阶段***1949-1962年***称为初期阶段,1957年教育部邀请苏联专家在清华大学举办了画法几何及机械制图教学研究进修班,在总结交流基础上,初步形成了中国模式的工程制图教..._印刷工程 计算机相关课程

(转)C语言家族扩展_c语言家族分支-程序员宅基地

文章浏览阅读3.1k次。(转)C语言家族扩展 翻译:5.1--5.6林峰5.7--5.20董溥5.21--5.26王聪5.27--5.34刘洋5.35--5.43贾孟树致谢:感谢陈老师指出其中的一些错误,已修订。 修订记录: 修订一些用词和标点符号。(董溥)2007年1月12号修订一些用词和错别字。(王聪)2006年12月14号修正一些错误的标签。(王聪,董溥)2006年12月13号GNU C提供了多种在ISO标准C中没有的特性。(‘-pedantic’选项会使GC_c语言家族分支

elementui css,elementUI——主题及自定义-程序员宅基地

文章浏览阅读1.3k次。说明:本文基于[email protected],源码详见element。一、主题相关代码结构:可以看出两点:a. 每个element ui组件基本都对应有单独的scss文件;b. 单独的组件scss文件,支持了组件按需引入时,样式部分也能按需引入的诉求;c.theme-chalk/src/common和theme-chalk/src/mixins目录下,主要是一些公共样式的设置,全局sass变量..._elementui css

H5 如何实现唤起 APP_如何实现拼多多h5直接跳转淘宝或者拼多多-程序员宅基地

文章浏览阅读1.5k次。写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载。这里就涉及到了H5与Native之间的交互,为什么H5能够唤起APP并且跳转到对应的页面?就算你没写过想必也体验过,最常见的就是一些广告了,如果你点击了广告,他判断你手机装了对应APP,那他就会去打开那个APP,如果没安装,他会帮你跳转到应用商店去下载,这个还算人性化一点的,有些直接后台给你去下载,你完全无感知。_如何实现拼多多h5直接跳转淘宝或者拼多多

《计算机网络技术》教材分析,《计算机网络技术基础》教学计划-程序员宅基地

文章浏览阅读324次。《《计算机网络技术基础》教学计划》由会员分享,可在线阅读,更多相关《《计算机网络技术基础》教学计划(4页珍藏版)》请在人人文库网上搜索。1、临 湘 市 职 业 中 专教师工作计划及实施情况表姓 名 周 小 敏 任教科目 计算机网络技术基础 任教年级 高 二 班 次 14级计算机、苹果班 教研组长 李 岳 军 教务主任 冯 云 主管校长 李 晓 红 时 间 2016 年 上 学期本期教学的主要任务和..._计算机网络教材分析

随便推点

php mysql安装图解_MySQL安装教程图解-程序员宅基地

文章浏览阅读245次。下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下!打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行setup.exe,出现如下界面 mysql安装图文教程1 mysql安装向导启动,按Next继续 mysql图文安装教程2 选择安装类型,有Typica下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下!打开下载的mysql..._php-mysql安装

python支持oracle的驱动_python 支持oracle数据库-程序员宅基地

文章浏览阅读339次。大年初一mark一下新的一年将会下线个人ORACLE外文blog,精力有限,会全力在阿里云云栖社区分享,主要内容还是数据库相关,包括但不限于以下内容:ORACLE数据库性能分析PostgreSQL数据库全栈支持PPAS数据库全栈支持专注ORACLE数据库和应用迁移至阿里云PPAS、PostgreSQL等数据...文章唐修2019-02-051169浏览量PostgreSQL修炼之道:从小工到专家...._python官方镜像里面没有oracle驱动

mysql导入报错1071_导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes...-程序员宅基地

文章浏览阅读644次。一、背景今天把服务器的数据库导出了一份sql文件,准备导入到本地,但是在导入的时候,报了个错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes这就很奇怪了,明明服务器上都可以,凭什么我这边就报错呢。二、错误分析1、错误部分的sql文件CREATE TABLE ..._mysql导入报错[err] cannot create table [商品成本]: 1071 - specified key was

小米路由r2d论坛_小米路由器R2D固件 V2.24.10 官方稳定版-程序员宅基地

文章浏览阅读3k次。小米路由器R2D固件是小米官方为其推出的路由器刷机更新固件,优化了Wifi能力,同时修复了系统中的一些小问题,提升了系统的稳定性和安全性,如果你的路由器出现了一些小问题,可以通过这个固件来更新下系统。【更新说明】1.优化了共享WiFi功能,提升了使用体验2.修复了一些小问题,提高了系统安全性及稳定性【刷机教程】1、准备一个系统格式为FAT或FAT32的U盘;重要的事情再说三遍:U盘刷机会清空硬盘上..._小米路由r2d论坛

OpenWRT使用SNMP监测网络状态_openwrt snmp-程序员宅基地

文章浏览阅读1.9w次。最近在写毕业论文,需要监测路由器的网络状态,路由器是TP-Link TL1043ND v2,操作系统版本是OpenWRT 15.05,本来打算在路由器和监测机上使用Socket通信来交互信息的,写着写着发现太麻烦了,因为路由器有许多个,就需要在监测机上要实现多线程之类的东西,后来发现OpenWRT上已经有编译好的SNMP包了,于是就直接用它了,然后通过配置snmpd.config文件来扩展,调用iw_openwrt snmp

python中concat的用法_pandas中concat()的用法-程序员宅基地

文章浏览阅读5.4k次。pandas.concat()通常用来连接DataFrame对象。默认情况下是对两个DataFrame对象进行纵向连接, 当然通过设置参数,也可以通过它实现DataFrame对象的横向连接。让我们通过几个例子来看看concat()的用法。1. 纵向连接DataFrame对象(1)两个DataFrame对象的列完全相同# 初始化两个DataFrame对象df1 = pd.DataFrame([['a..._python中concat函数

推荐文章

热门文章

相关标签