来自 安全 2021-12-14 02:18 的文章

cc攻击防御_高防服务器租赁_指南

cc攻击防御_高防服务器租赁_指南

简介:复制和粘贴代码("复制粘贴")是一种原始但非常常见的软件重用形式。不幸的是,这种做法充满了危险,尤其是在整个系统中复制错误和安全缺陷。作为一种通用的代码构造技术,复制粘贴在多大程度上是允许还是不允许是有争议的,但是每个人都可以同意,通过对复制的代码进行不一致的修改而引入的错误是不好的。人类程序员可以手动检测复制粘贴的一些实例,至少在相当小的代码基中。对于自动化工具来说,安全狗能防御ddos吗,这样做并不困难,免费ddos防御墙,即使对于大型程序也是如此(尽管当副本被修改时可能会很棘手,这是经常发生的)。然而,只检测那些会导致完全错误的复制粘贴实例要困难得多,即使对于自动工具也是如此,而且非常难以手动完成(因为与感知心理学有关的原因)。在这篇文章中,我将展示GrammaTech的CodeSonar检测棘手的复制粘贴错误的例子,以及这对提高质量和安全性有何帮助。相关:反模式:剪切和粘贴编程静态分析工具使用的经济性复制粘贴编程真的是个问题吗?复制粘贴:我们一直这样做,我们知道得更好大多数开发人员都会同意,简单地复制和粘贴代码是一种糟糕的重用形式,而且通常是一种糟糕的做法。然而,这是常见的,因为适当的再利用需要额外的时间和金钱(在短期内)。这可能是由于缺乏适当的再利用动机和缺乏先见之明。不管有什么理由,有很多理由可以尽量减少复制和粘贴,例如:重用性差:开发软件的真正成本不在于代码的类型化,因此简单地复制代码对提高生产率几乎没有帮助。一次又一次地复制错误会让事情变得更糟。另外,对于收集可重用的代码来说,这是非常有用的。创建更多的代码会将代码覆盖率指标推向错误的方向,并增加测试负担。重复错误和安全漏洞:最明显的问题是在整个项目中重复原始代码中固有的问题。更糟糕的是,每个复制的版本通常都会根据其特定的上下文进行修改,防御ddos攻击价值,这使得跟踪bug变得更加困难。引入新的错误:代码被复制后,通常会进行修改以适应新的位置。这种修改通常是一个手动编辑过程,因此容易出现各种各样的人为错误,这些错误会困扰任何重复的手动任务。这些编辑通常是仓促进行的,没有完全理解原始代码,允许出现更微妙的语义错误。许可证问题代码可以像从内部项目一样容易地从在线示例或开源项目中复制和粘贴。不了解复制源的许可证含义可能是非常麻烦的,对于嵌入式设备更是如此,板载软件被认为是一种新的、唯一的拷贝。这不是GrammaTech专门研究的领域,但其他公司确实为这些类型的分析提供了工具。高级静态分析如何帮助检测棘手的复制和粘贴错误一个只检测复制粘贴实例的工具对于那些希望重构现有的工作代码的人来说是很有用的,但是它将是一个非常简单的工具:开发人员不知道从哪里开始。即使是那些不想清除过去复制粘贴错误的人,也有兴趣在代码中发现实际错误。高级静态分析可以专注于发现这样的复制粘贴错误,即代码被重用,但在此过程中引入了新的错误。这类错误通常在变量替换过程中引入,即将粘贴的代码调整为新上下文的过程。这是一个棘手的分析。分析工具必须首先找到跨大跨度代码的重用模式,然后找到粘贴代码中变量替换不完全的位置,而不是源位置。即使这样也不足以证明报告错误,因为有许多原因可以解释为什么一个看起来不一致的修改正是程序员想要的并且是完全正确的。我们必须走得更远,试着深入了解程序员的思想,看看他们可能的意图是否与他们实际编写的代码相匹配。它需要高精度地完成这项工作,正如我们之前在一篇文章中所讨论的那样。示例以下示例是在开源项目中使用GrammaTech CodeSonar发现的真实错误。博士后在本例中,复制并粘贴了16行代码块,并且更改了一个变量,但并不一致–副本中的txn指针不正确,应为cur_txn。我们通知了开发团队,他们按照图1所示的警告修改了代码。图1:文件postgresql-9.4.4/src/backend/replication/logical/reorderbuffer.c中的错误14208。FFmpeg图2显示了CodeSonar在FFmpeg(一种开源视频转码器)中检测到的复制粘贴错误,其中复制的代码没有一致地更新,在表达式pkt->dts中留下dts字段,而不是正确的pts。图2:在文件FFmpeg/libavformat/mux.c中检测到复制和粘贴错误。开放式办公室另一个例子是在OpenOffice中发现的,其中代码被错误地复制和粘贴。正确变量NSizY与NSizX的区别在原始代码中很微妙,很容易被忽略,但是请注意,CodeSonar中这个问题的表示是如何使它变得非常清楚的。这个bug是最近提交给OpenOffice项目的,目前还没有得到解决。图3:文件main/svx/source/svdraw中的问题127449/svdxcgv.cxx文件. Llvm公司这个例子展示了如何检测复制粘贴错误,即使是在字符串文本中,通常与附近代码中可识别的模式结合使用。在本例中,复制了一个非常大的代码块(一个包含许多成员函数体的整个类定义),因此图4只显示了原始代码的一部分和副本的一部分。图4。文件libcxx/include/list.h中的llvm错误34996。对GrammaTech复制粘贴错误检测的内部测试发现,在7个不同的开源软件包中,有超过20个不同的已确认错误,另外至少还有5个bug有待于各个包的维护人员审查。受影响的包包括linux、chromium、mysql、wine、eclipse TCF、python和postgres。结论:复制和粘贴代码是软件开发中最常见的重用形式,尽管它会产生问题。虽然真正的因素分解和重用通常是首选的,但对于遗留代码来说,这可能并不实用,因此在将这种做法引入最终产品之前,使用高级静态分析是找到这些错误的关键(如示例中所示)。与所有静态分析一样,在代码中发现问题后,在花费昂贵的测试工作之前,在代码中发现问题对每个人都是有利的。简单的工具可以检测复制和粘贴的代码,这些工具可以为您创建大量的工作,ddos攻击防御权衡,而只需显示很少的内容。一个高级的静态分析工具,它只向您显示复制的代码点中真实的(通常是细微的)错误,您可以在需要进行的更改处获得最大的开发投资回报。如果没有佩特里博士今天的杰出贡献,佩特里将永远不可能在那里。Mihancea博士是罗马尼亚蒂米斯瓦拉理工大学的副教授,尽管这项工作与该职位无关。有兴趣了解更多?阅读C++高级静态分析指南阅读指南hbspt.cta公司.\u relativeUrls=真;hbspt.cta.负荷(582328,腾讯防御最高的DDoS,'42fd5967-604d-43ad-9272-63d7c9d3b48f',{});