CIFCOM跨境电商 CIFCOM跨境电商

当前位置: 首页 » 出海百科 »

Audited lessons and took not

试听、旁听、报名,补习班、托管班、家教,盘点课外班相关英文

掌握0-6岁词汇,自创家庭英语环境

After-School Class 课外班

作者:小雅和英美友人

试听分几种情况,第一种是向大家做展示用的非常规课程,叫:

1. Demo class 试听课

There's a demo English class at 2 pm today. Do you want to check it out?

今天下午两点有一节英语试听课。你要不要去听听?

第二种试听是对常规课程的初次免费尝试,叫:

2. Free trial session 免费试听课

The piano class offers a free trial session. We can schedule a time.

钢琴班提供一节免费试听课。咱们可以预约个时间。

Lesson、session、course、class的区别:

Lesson:about content,指上课的内容;一对一的课程通常用lesson。

Session:about time,指上课的时间。

Course:a couple of lessons,多节课的集合。

Class:a group of people,通常指大家一起上的课程;class的意义最广泛,也可以替代lesson、session,和course。

第三种试听是到已经开课的班级中旁听。

旁听”英文怎么说呢?查字典会查到audit这个词,但是它仅适用于大学,指学生听一门课,既不用交学费,也不用参加考试,当然也不能获得学分。

3. Audit 旁听(仅限大学,美式英语)

After I graduated, I audited some biology classes.

我毕业之后旁听了一些生物系的课。

在幼儿园、小学和中学,孩子旁听别人的课,用:

4. Sit in on 旁听

If you don't like the reading class, you can sit in on the music class and see if you like that.

你要是不喜欢阅读课,可以试听一下音乐课,看看你喜不喜欢。

家长为了解孩子的学习情况,旁听孩子的课程,也用sit in on。

Mommy is going to sit in on your math class tomorrow.

妈妈明天去旁听你们的数学课。

Sit in on的两个介词in和on缺一不可,sit in your class指坐在某个班里,没有sit on your class这个词组。

如果你想问孩子要不要试试某个课,非常简单,用:

5. Try out 试一试

Do you want to try this class out?

你想试试这个课吗?

6. Choose a class 选课

Which elective did you choose? Ceramics or arts and crafts?

你选了什么选修课?陶艺还是手工?

Ceramics读作[s?'r?miks]。

7. Sign up for 报名

Should I sign you up for the taekwondo class?

我给你报跆拳道班吗?

Taekwondo读作 [tai'kw?nd?u]。

8. Tryout, audition 选拔

(1) Athletic: tryout 体育:选拔

Only the students who pass tryouts can join the school soccer team.

只有通过选拔的学生才能进入校足球队。

Athletic读作[?θ'letik]。

(2) Non-athletic: audition 非体育:面试

I passed the audition and I got the lead role for the school play.

我通过面试了,得到了校园剧主角的位置。

9. After-school class 课外班

You have an after-school class today so you'll be later than usual. I'll be able to pick you up after work.

你今天有课外班,会比平常晚。我可以下班以后接你。

10. Extracurricular activity 课外活动

He has too many extracurricular activities. We don't need to do that.

他课外活动太多了。咱们不用那样。

11. Tutoring session 私教课、家教课

I scheduled a tutoring session on Saturday for you with Ms. Wang to improve your writing skills.

我给你和王老师约了一个周六的家教课,给你补补写作。

12. Remediation class 补习班

Since your grades were not very good, I think you should take the remediation class.

你的成绩不太好,我觉得你应该上上补习班。

Remediation class在美国通常是学校开的,可能在上课期间进行,也可能在课后,并不是每个学校都有这样的设置。它是为学习跟不上的孩子设置的,和中国国情下为了学习更好而参加的补习班不是一种概念。

13. Elective 选修课

I've got baking as my elective this semester.

我这学期的选修课有烘焙。

Elective是课程的一部分,可能在上课期间进行,也可能在课后。

14. Gifted and talented class 特长班

The gifted and talented class has a chess competition next week. Are you looking forward to it?

特长班下周有个国际象棋比赛。你一直盼着呢吧?

在美国,gifted and talented class是很小一部分学生通过选拔可以参加的课程,包括各种学科的提高课程和一些兴趣活动,每周一般2、3节。它和中国的为参加某一学科竞赛而组建的长期班级,概念有所不同。

15. After-school care 托管班

Mommy and daddy will be very busy this month, so you have to go to after-school care.

爸爸妈妈这个月非常忙,你得上托管班了。

16. Summer camp 夏令营

This year's summer camp has started enrollment. Let's read the brochure together tonight.

今年的夏令营开始招生了。咱俩晚上一起看看宣传手册。

17. Elective subject examples 兴趣班学科举例

(1) Band 乐团

我们平时说band一般指摇滚乐队(rock band),但是作为兴趣班,它指的是管乐团(concert band)和军乐团(marching band)。

(2) Choir 合唱团

它的读音是['kwai?],不是['kw?i?]。

(3) Voice lesson 一对一的声乐课

(4) Dance 舞蹈

Dance作为学科名称,不需要加ing。

(5) Drawing 画画

用钢笔和铅笔(pencil and ink)作画,包括素描(sketching)。

(6) Painting 油画

用颜料(paint)作画,包括水彩(water color)、油画颜料(oil paint)、acrylic(丙烯)等。

Acrylic读作 [??krilik]。

(7) Art 艺术课

包括drawing、painting、拼贴画(collage)、扎染(dyeing)等各种艺术形式。

Collage读作[k?'lɑ?],不要读成college大学那个词。

Collage 拼贴画

(8) Theater / Drama 戏剧课

Drama专注于表演,theater除了表演(acting),也涉及舞美(set)、灯光(lighting)、音乐(music)、声效(sound)、服装(costumes)等多方面技能。

(9) Math Olympics 数学奥林匹克

International Mathematical Olympiad (IMO)

(10) Debate Team 辩论队

梅雷迪思收购《时代》杂志母公司时代公司 美国传媒行业继续整合

时代公司这个昔日的媒体巨头还在做着艰难的转型,但毫无疑问,属于它的时代已经过去了。

(资料图)

《财经》记者 高洪浩/文 宋玮/编辑

在经历了高管流失、削减开始以及营收、发行量与订阅人数不断下滑后,时代公司终于加入了美国传媒行业抱团取暖”的大潮。

美国传媒公司梅雷迪思(Meredith Corporation)在当地时间11月26日宣布,将公司将以美股18.8美元的价格收购美国《时代》周刊母公司时代公司(NYSE:TIME)1亿股份,总金额达18.5亿美元。目前两家公司的董事会均已批准了这桩交易,预计收购将于2018年第一季度完成。

在计入债务后,时代公司现时估值28亿美元。交易完成后,时代公司旗下的《时代》(TIME)、《人物》(People)、《财富》(Fortune)、《体育画报》(Sports Illustrated)等媒体品牌将归属梅雷迪斯公司。在二者合并后,旗下平面媒体将会拥有1.35亿名用户,以及近6000万的发行量。

根据路透社报道,梅雷迪思将以全现金的方式收购时代公司。这项交易获得了美国保守派亿万富翁科赫兄弟(Charles G. Koch与David H. Koch)的支持。根据知情人士透露,科赫兄弟计划为此项交易注资超过6亿美元。在2017年福布斯全球富豪榜上,科赫兄弟分别以483亿美金的财富并列全球富豪榜第8位。

时代公司原属于时代华纳(NYSE:TWX)旗下的杂志业务子公司,随着杂志业在近年来持续低迷,时代华纳在2014年6月正式将时代公司进行拆分,后者于同年6月10日于纽交所上市。时代公司旗下拥有《时代》、《人物》、《财富》等21本刊物。1923年创立的《时代》周刊是旗下最早的新闻杂志品牌,其最为人所熟知的是杂志每年评选的年度风云人物,获选人物将以人像特写的形式登上杂志封面。

梅雷迪斯作为同样知名的美国传媒公司,旗下拥有《家庭圈》(Family Circle)、《园林》(Garden)、《美好家园》(Better Homes)等18本杂志以及13家地方广播公司与电视台。这并非梅雷迪斯第一次尝试收购时代公司。2013年,梅雷迪斯曾第一次向时代华纳发起邀约,尝试收购旗下部分杂志品牌。

梅雷迪斯的三次收购

据《纽约时报》报道,时代华纳原本希望保留旗下杂志业务,其高管认为这些新闻杂志与时代华纳旗下的有线电视新闻网CNN等媒体业务在报道上能够产生协同作用,但随着整个广告市场的疲软与杂志行业的衰退,他们的想法发生了改变。

2012年《时代》、《财富》、《金钱》、《体育画报》等杂志的广告页面分别减少了12%-4%不等,发行量也出现了不同程度的下滑。据媒体稽核联盟(Alliance for Audited Media)发布的数据显示,原本作为时代公司过半利润来源的《人物》杂志,在2012年上半年的零售销售量下降了12%。一位接近时代华纳的人士表示,《人物》杂志的销量下滑是导致时代公司滑坡的直接原因。

根据时代华纳财报,2012年时代华纳出版营收为 34.4 亿美元,同比下滑了 6.6%,利润同比下跌 25%。在时代华纳的总营收中,时代公司的占比仅为12%。

根据时代公司与梅雷迪斯在2013年商议的最初的方案,梅雷迪斯将旗下《美好生活》、《女性家庭月刊》和《园林》与时代公司《人物》、《造型》等资产合并,组建一家独立公司。时代旗下的品牌杂志《时代》、《体育画报》、《金钱》与《财富》仍然留在时代公司。不过最终,在经过数周的谈判后,双方未能达成协议。

第一次谈判失败的原因在于,双方针对如新成立公司的估值、新公司所应该承担的债务多少,以及部分杂志应该用什么样的方式从时代公司剥离等问题上未能达成一致。与此同时,时代华纳内部也在考虑完全剥离时代公司以及部分剥离的利弊。最终,时代华纳认为,完全剥离时代公司所获得的利益要高于被梅雷迪斯部分收购。

事实上,在2014年时代公司被分拆以前的6年时间里,时代华纳的杂志业务收入一直呈下滑趋势。这也是导致时代华纳决定完全切割杂志业务的主要原因;但当时的梅雷迪斯对于时代华纳所拥有的《时代》、《财富》等杂志品牌并不感兴趣,梅雷迪斯旗下媒体品牌的读者更聚焦在女性群体。

时代华纳董事长兼CEO杰弗里·比克斯(Jeffrey Bewkes)在接受媒体采访时表示,完全拆分杂志业务将能够让时代华纳的业务战略更加清晰,未来时代华纳将把精力专注在电视网络以及影视业务上。在被剥离后,时代公司分摊了时代华纳13亿美元的债务,是时代公司当年盈利额的三倍有余。

2017年初,梅雷迪斯再次尝试收购时代公司,却因为无法从银行获得足够资金支持而导致谈判陷入僵局。直到如今,拥有雄厚资金实力的科赫兄弟介入,旗下Koch Industries一个私募股权投资部门愿意为这起收购注资6亿美元,令问题迎刃而解。

时代公司求变

美国杂志行业的不景气曾一度被归结为2008年的经济危机。这场周期性的经济衰退使得了整个美国杂志行业受创,并导致其从2007年开始不断走下坡路。但值得注意的是,经济危机两三年后,美国整体的零售行业开始实现复苏,而杂志行业却仍在继续下滑,杂志行业此时才意识到,行业的衰退实际上是受到了数字时代的冲击,也是一股不可逆的趋势。

时代公司在此前曾经做过积极的转型尝试。在前CEO Joe Ripp的治下,原生广告与数字化成为了时代公司转型的重要举措。

Joe Ripp率先在严肃媒体上尝试模糊了广告经营与内容采编的边界。《时代》周刊在封面上开始出现了广告,包括软文、植入广告、赞助内容等原生广告开始出现。与此同时,时代公司还专门成立了名为Foundry的工作室,这个由内容编辑部、广告部、视频部等工作人员所组成的工作室,其主要工作就是为客户提供富有创造性的原生广告内容。根据时代公司透露数据,原生广告正在创造越来越多的价值,Foundry工作室在2016年第一季度所创造的营收利润已经超过2015年全年。

其次,Joe Ripp加大了数字化渠道的建设,尤其是移动端以及视频平台的建设。在这场技术的变革上,Joe Ripp打通了旗下所有子媒体的内容管理系统,这意味着全公司的编辑可以任意使用公司任何子媒体的内容。在此期间,时代公司收购了社交网络MySpace的母公司Viant,这不仅为时代公司进一步开拓了线上市场,同时MySpace庞大的用户数据可以精准为时代公司的广告商提供目标受众。

举办活动和开办垂直性子媒体品牌是另一个有利可图的机会。在过去,时代公司举办的主要活动在于财富全球论坛以及Essence电影节,Joe Ripp成为CEO后,更强调活动的重要性。比如《体育画报》开始举办了运动节、《娱乐》周刊利用其在影视行业的资源,推出红毯晚宴。根据时代公司财报,包括互动、品牌授权等业务创造的营收目前已经追平数字广告收入。

随着年轻一代的市场到来,垂直化与细分化的内容成为了未来的趋势。在欧莱雅和美宝莲的赞助下,2017年时代公司推出了全新的美妆视频网站The Pretty。另外,时代还专门建立起了专注于年轻女性内容的媒体品牌Motto。

不过,时代公司的转型之路仍然艰难。目前,时代公司70%的营收仍然来自于出版业务。根据时代公司截止至9月30日的第三季度财报,公司总收入为6.79亿元,同比下滑9.5%。这已经是时代公司连续第6个季度没有实现预期收入。

《时代》、《体育画报》已经越来越倾向于成为一个多媒体内容平台,时代公司内部,杂志业务也在被越来越轻量化,相反影音娱乐越来越受到重视。《体育画报》甚至进行了泳装的拍卖与销售,未来,它计划将销售品类拓展至运动服。

时代公司已经从那栋工作使用了55年,位于洛克菲勒中心的时代生活大厦(Time&Life Building),搬到了曼哈顿下城一座其貌不扬的大楼。这个昔日的媒体巨头还在做着艰难的转型,但毫无疑问,属于它的时代已经过去了。

(作者微信:364207855,欢迎交流”)

使用 gosec 检查 Go 代码中的安全问题

来学习下 Go 语言的安全检查工具 gosec。

? 来源:linux.cn ? 作者:Gaurav Kamathe ? 译者:lxbowlf ?

(本文字数:11199,阅读时长大约:13 分钟)

Go 语言 写的代码越来越常见,尤其是在容器、Kubernetes 或云生态相关的开发中。Docker 是最早采用 Golang 的项目之一,随后是 Kubernetes,之后大量的新项目在众多编程语言中选择了 Go。

像其他语言一样,Go 也有它的长处和短处(如安全缺陷)。这些缺陷可能会因为语言本身的缺陷加上程序员编码不当而产生,例如,C 代码中的内存安全问题。

无论它们出现的原因是什么,安全问题都应该在开发过程的早期修复,以免在封装好的软件中出现。幸运的是,静态分析工具可以帮你以更可重复的方式处理这些问题。静态分析工具通过解析用某种编程语言写的代码来找到问题。

这类工具中很多被称为 linter。传统意义上,linter 更注重的是检查代码中编码问题、bug、代码风格之类的问题,它们可能不会发现代码中的安全问题。例如, Coverity 是一个很流行的工具,它可以帮助寻找 C/C++ 代码中的问题。然而,也有一些工具专门用来检查源码中的安全问题。例如, Bandit 可以检查 Python 代码中的安全缺陷。而 gosec 则用来搜寻 Go 源码中的安全缺陷。gosec 通过扫描 Go 的 AST( 抽象语法树(abstract syntax tree))来检查源码中的安全问题。

开始使用 gosec

在开始学习和使用 gosec 之前,你需要准备一个 Go 语言写的项目。有这么多开源软件,我相信这不是问题。你可以在 GitHub 的 热门 Golang 仓库 中找一个。

本文中,我随机选了 Docker CE 项目,但你可以选择任意的 Go 项目。

安装 Go 和 gosec

如果你还没安装 Go,你可以先从仓库中拉取下来。如果你用的是 Fedora 或其他基于 RPM 的 Linux 发行版本:

$ dnf install golang.x86_64

如果你用的是其他操作系统,请参照 Golang 安装 页面。

使用 version 参数来验证 Go 是否安装成功:

$ go versiongo version go1.14.6 linux/amd64

运行 go get 命令就可以轻松地安装 gosec:

$ go get github.com/securego/gosec/cmd/gosec

上面这行命令会从 GitHub 下载 gosec 的源码,编译并安装到指定位置。在仓库的 README 中你还可以看到 安装该工具的其他方法 。

gosec 的源码会被下载到 $GOPATH 的位置,编译出的二进制文件会被安装到你系统上设置的 bin 目录下。你可以运行下面的命令来查看 $GOPATH 和 $GOBIN 目录:

$ go env | grep GOBINGOBIN="/root/go/gobin"$ go env | grep GOPATHGOPATH="/root/go"

如果 go get 命令执行成功,那么 gosec 二进制应该就可以使用了:

$ ls -l ~/go/bin/total 9260-rwxr-xr-x. 1 root root 9482175 Aug 20 04:17 gosec

你可以把 $GOPATH 下的 bin 目录添加到 $PATH 中。这样你就可以像使用系统上的其他命令一样来使用 gosec 命令行工具(CLI)了。

$ which gosec/root/go/bin/gosec$

使用 gosec 命令行工具的 -help 选项来看看运行是否符合预期:

$ gosec -helpgosec - Golang security checkergosec analyzes Go source code to look for common programming mistakes thatcan lead to security problems.VERSION: devGIT TAG:BUILD DATE:USAGE:

之后,创建一个目录,把源码下载到这个目录作为实例项目(本例中,我用的是 Docker CE):

$ mkdir gosec-demo$ cd gosec-demo/$ pwd/root/gosec-demo$ git clone into 'docker-ce'...remote: Enumerating objects: 1271, done.remote: Counting objects: 100% (1271/1271), done.remote: Compressing objects: 100% (722/722), done.remote: Total 431003 (delta 384), reused 981 (delta 318), pack-reused 429732Receiving objects: 100% (431003/431003), 166.84 MiB | 28.94 MiB/s, done.Resolving deltas: 100% (221338/221338), done.Updating files: 100% (10861/10861), done.

代码统计工具(本例中用的是 cloc)显示这个项目大部分是用 Go 写的,恰好迎合了 gosec 的功能。

$ ./cloc /root/gosec-demo/docker-ce/ 10771 text files. 8724 unique files. 2560 files ignored.-----------------------------------------------------------------------------------Language files blank comment code-----------------------------------------------------------------------------------Go 7222 190785 230478 1574580YAML 37 4831 817 156762Markdown 529 21422 0 67893Protocol Buffers 149 5014 16562 10071使用默认选项运行 gosec

在 Docker CE 项目中使用默认选项运行 gosec,执行 gosec ./... 命令。屏幕上会有很多输出内容。在末尾你会看到一个简短的 Summary”,列出了浏览的文件数、所有文件的总行数,以及源码中发现的问题数。

$ pwd/root/gosec-demo/docker-ce$ time gosec ./...[gosec] 2024/08/20 04:44:15 Including rules: default[gosec] 2024/08/20 04:44:15 Excluding rules: default[gosec] 2024/08/20 04:44:15 Import directory: /root/gosec-demo/docker-ce/components/engine/opts[gosec] 2024/08/20 04:44:17 Checking package: opts[gosec] 2024/08/20 04:44:17 Checking file: /root/gosec-demo/docker-ce/components/engine/opts/address_pools.go[gosec] 2024/08/20 04:44:17 Checking file: /root/gosec-demo/docker-ce/components/engine/opts/env.go[gosec] 2024/08/20 04:44:17 Checking file: /root/gosec-demo/docker-ce/components/engine/opts/hosts.go# End of gosec runSummary: Files: 1278 Lines: 173979 Nosec: 4 Issues: 644real 0m52.019suser 0m37.284ssys 0m12.734s$

滚动屏幕你会看到不同颜色高亮的行:红色表示需要尽快查看的高优先级问题,黄色表示中优先级的问题。

关于误判

在开始检查代码之前,我想先分享几条基本原则。默认情况下,静态检查工具会基于一系列的规则对测试代码进行分析,并报告出它们发现的所有问题。这是否意味着工具报出来的每一个问题都需要修复?非也。这个问题最好的解答者是设计和开发这个软件的人。他们最熟悉代码,更重要的是,他们了解软件会在什么环境下部署以及会被怎样使用。

这个知识点对于判定工具标记出来的某段代码到底是不是安全缺陷至关重要。随着工作时间和经验的积累,你会慢慢学会怎样让静态分析工具忽略非安全缺陷,使报告内容的可执行性更高。因此,要判定 gosec 报出来的某个问题是否需要修复,让一名有经验的开发者对源码做人工审计会是比较好的办法。

高优先级问题

从输出内容看,gosec 发现了 Docker CE 的一个高优先级问题,它使用的是低版本的 TLS( 传输层安全(Transport Layer Security)())。无论什么时候,使用软件和库的最新版本都是确保它更新及时、没有安全问题的最好的方法。

[/root/gosec-demo/docker-ce/components/engine/daemon/logger/splunk/splunk.go:173] - G402 (CWE-295): TLS MinVersion too low. (Confidence: HIGH, Severity: HIGH) 172: > 173: tlsConfig := &tls.Config{} 174:

它还发现了一个弱随机数生成器。它是不是一个安全缺陷,取决于生成的随机数的使用方式。

[/root/gosec-demo/docker-ce/components/engine/pkg/namesgenerator/names-generator.go:843] - G404 (CWE-338): Use of weak random number generator (math/rand instead of crypto/rand) (Confidence: MEDIUM, Severity: HIGH) 842: begin: > 843: name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))]) 844: if name == "boring_wozniak" /* Steve Wozniak is not boring */ {

中优先级问题

这个工具还发现了一些中优先级问题。它标记了一个通过与 tar 相关的解压炸弹这种方式实现的潜在的 DoS 威胁,这种方式可能会被恶意的攻击者利用。

[/root/gosec-demo/docker-ce/components/engine/pkg/archive/copy.go:357] - G110 (CWE-409): Potential DoS vulnerability via decompression bomb (Confidence: MEDIUM, Severity: MEDIUM) 356: > 357: if _, err = io.Copy(rebasedTar, srcTar); err != nil { 358: w.CloseWithError(err)

它还发现了一个通过变量访问文件的问题。如果恶意使用者能访问这个变量,那么他们就可以改变变量的值去读其他文件。

[/root/gosec-demo/docker-ce/components/cli/cli/context/tlsdata.go:80] - G304 (CWE-22): Potential file inclusion via variable (Confidence: HIGH, Severity: MEDIUM) 79: if caPath != "" { > 80: if ca, err = ioutil.ReadFile(caPath); err != nil { 81: return nil, err

文件和目录通常是操作系统安全的最基础的元素。这里,gosec 报出了一个可能需要你检查目录的权限是否安全的问题。

[/root/gosec-demo/docker-ce/components/engine/contrib/apparmor/main.go:41] - G301 (CWE-276): Expect directory permissions to be 0750 or less (Confidence: HIGH, Severity: MEDIUM) 40: // make sure /etc/apparmor.d exists > 41: if err := os.MkdirAll(path.Dir(apparmorProfilePath), 0755); err != nil { 42: log.Fatal(err)

你经常需要在源码中启动命令行工具。Go 使用内建的 exec 库来实现。仔细地分析用来调用这些工具的变量,就能发现安全缺陷。

[/root/gosec-demo/docker-ce/components/engine/testutil/fakestorage/fixtures.go:59] - G204 (CWE-78): Subprocess launched with variable (Confidence: HIGH, Severity: MEDIUM) 58: > 59: cmd := exec.Command(goCmd, "build", "-o", filepath.Join(tmp, "httpserver"), "github.com/docker/docker/contrib/httpserver") 60: cmd.Env = append(os.Environ(), []string{

低优先级问题

在这个输出中,gosec 报出了一个 unsafe 调用相关的低优先级问题,这个调用会绕开 Go 提供的内存保护。再仔细分析下你调用 unsafe 的方式,看看是否有被别人利用的可能性。

[/root/gosec-demo/docker-ce/components/engine/pkg/archive/changes_linux.go:264] - G103 (CWE-242): Use of unsafe calls should be audited (Confidence: HIGH, Severity: LOW) 263: for len(buf) > 0 { > 264: dirent := (*unix.Dirent)(unsafe.Pointer(&buf[0])) 265: buf = buf[dirent.Reclen:][/root/gosec-demo/docker-ce/components/engine/pkg/devicemapper/devmapper_wrapper.go:88] - G103 (CWE-242): Use of unsafe calls should be audited (Confidence: HIGH, Severity: LOW) 87: func free(p *C.char) { > 88: C.free(unsafe.Pointer(p)) 89: }

它还标记了源码中未处理的错误。源码中出现的错误你都应该处理。

[/root/gosec-demo/docker-ce/components/cli/cli/command/image/build/context.go:172] - G104 (CWE-703): Errors unhandled. (Confidence: HIGH, Severity: LOW) 171: err := tar.Close() > 172: os.RemoveAll(dockerfileDir) 173: return err自定义 gosec 扫描

使用 gosec 的默认选项会带来很多的问题。然而,经过人工审计,随着时间推移你会掌握哪些问题是不需要标记的。你可以自己指定排除和包含哪些测试。

我上面提到过,gosec 是基于一系列的规则从 Go 源码中查找问题的。下面是它使用的完整的 规则 列表:

G101:查找硬编码凭证G102:绑定到所有接口G103:审计 unsafe 块的使用G104:审计未检查的错误G106:审计 ssh.InsecureIgnoreHostKey 的使用G107: 提供给 HTTP 请求的 url 作为污点输入G108: /debug/pprof 上自动暴露的剖析端点G109: strconv.Atoi 转换到 int16 或 int32 时潜在的整数溢出G110: 潜在的通过解压炸弹实现的 DoSG201:SQL 查询构造使用格式字符串G202:SQL 查询构造使用字符串连接G203:在 HTML 模板中使用未转义的数据G204:审计命令执行情况G301:创建目录时文件权限分配不合理G302:使用 chmod 时文件权限分配不合理G303:使用可预测的路径创建临时文件G304:通过污点输入提供的文件路径G305:提取 zip/tar 文档时遍历文件G306: 写到新文件时文件权限分配不合理G307: 把返回错误的函数放到 defer 内G401:检测 DES、RC4、MD5 或 SHA1 的使用G402:查找错误的 TLS 连接设置G403:确保最小 RSA 密钥长度为 2048 位G404:不安全的随机数源(rand)G501:导入黑名单列表:crypto/md5G502:导入黑名单列表:crypto/desG503:导入黑名单列表:crypto/rc4G504:导入黑名单列表:net/http/cgiG505:导入黑名单列表:crypto/sha1G601: 在 range 语句中使用隐式的元素别名

排除指定的测试

你可以自定义 gosec 来避免对已知为安全的问题进行扫描和报告。你可以使用 -exclude 选项和上面的规则编号来忽略指定的问题。

例如,如果你不想让 gosec 检查源码中硬编码凭证相关的未处理的错误,那么你可以运行下面的命令来忽略这些错误:

$ gosec -exclude=G104 ./...$ gosec -exclude=G104,G101 ./...

有时候你知道某段代码是安全的,但是 gosec 还是会报出问题。然而,你又不想完全排除掉整个检查,因为你想让 gosec 检查新增的代码。通过在你已知为安全的代码块添加 #nosec 标记可以避免 gosec 扫描。这样 gosec 会继续扫描新增代码,而忽略掉 #nosec 标记的代码块。

运行指定的检查

另一方面,如果你只想检查指定的问题,你可以通过 -include 选项和规则编号来告诉 gosec 运行哪些检查:

$ gosec -include=G201,G202 ./...

扫描测试文件

Go 语言自带对测试的支持,通过单元测试来检验一个元素是否符合预期。在默认模式下,gosec 会忽略测试文件,你可以使用 -tests 选项把它们包含进来:

gosec -tests ./...

修改输出的格式

找出问题只是它的一半功能;另一半功能是把它检查到的问题以用户友好同时又方便工具处理的方式报告出来。幸运的是,gosec 可以用不同的方式输出。例如,如果你想看 JSON 格式的报告,那么就使用 -fmt 选项指定 JSON 格式并把结果保存到 results.json 文件中:

$ gosec -fmt=json -out=results.json ./...$ ls -l results.json-rw-r--r--. 1 root root 748098 Aug 20 05:06 results.json$ { "severity": "LOW", "confidence": "HIGH", "cwe": { "ID": "242", "URL": "" }, "rule_id": "G103", "details": "Use of unsafe calls should be audited", "file": "/root/gosec-demo/docker-ce/components/engine/daemon/graphdriver/graphtest/graphtest_unix.go", "code": "304: \t// Cast to []byte\n305: \theader := *(*reflect.SliceHeader)(unsafe.Pointer(\u0026buf))\n306: \theader. Len *= 8\n", "line": "305", "column": "36" },用 gosec 检查容易被发现的问题

静态检查工具不能完全代替人工代码审计。然而,当代码量变大、有众多开发者时,这样的工具往往有助于以可重复的方式找出容易被发现的问题。它对于帮助新开发者识别和在编码时避免引入这些安全缺陷很有用。

via: opensource.com

作者: Gaurav Kamathe 选题: lujun9972 译者: lxbowlf 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击了解更多”可访问文内链接
未经允许不得转载: CIFCOM跨境电商 » Audited lessons and took not

相关文章

CIFCOM

contact