如何进行40位有效神秘代码的代码检查

本帖子已过去太久远了,不再提供回复功能。1132人阅读
java_JEE_JSE_etc(51)
Java项目最枯燥的一部分,也是程序员总是避而不谈的一部分,就是检查代码。为了区块括号、代码缩进、Javadoc注释以及命名约定而检查其他人的上千行代码的确是一件痛苦的事。更糟糕的是,通常代码的检查还受限于紧迫的项目进度。没有足够的时间对代码的细节进行评估,因此代码检查经常变成了对代码的美化练习。不管检查者有多么好的意图,优化和逻辑检查都退居次席。&
  Java代码分析器减轻了这样的痛苦
  在面对这种情况的时候,Java代码分析器正是对症良药。这些工具尽可能地将代码检查过程自动化。留给人工来做的就只有检查类的缺陷以及核心逻辑并确定可能的优化方法。优化(去除不必要的实例化对象、检查数据库连接是否合理、确保数据在可能的情况下被缓存)对于任何代码通常会带来性能上的极大改进。
  最近我接触了各种代码分析器。我觉得一个基本的最重要的功能是与常用IDE(如NetBeans、Eclipse、jEdit以及JDeveloper)的集成。有一些代码检查工具在查找错误方面很有效,但是它们需要你根据给出的错误行的行号手工来追踪错误。这样的工具使用起来太累人了。与IDE环境集成了的工具可以大大简化这个过程,因为代码检查的结果是由所使用的IDE显示的。你只需在错误上双击就可以在Java编辑器中到达错误代码所在的行
  我的试用心得
  在我试用过的工具中,我发现其中三个工具十分强大并合乎与IDE集成的标准,它们是:&、&和&。
  PMD和Checkstyle
  根据PMD的文档,它会对代码中的如下部分进行检查:
   未使用的本地变量
   空的catch块
   未使用参数
   空if语句
   重复的import语句
   未使用的私有方法
   可能是Singletons的类
   短/长变量及方法名字
  Checkstyle检查如下部分:
   Javadoc注释
   命名约定
   Import语句
   体积大小
   修饰符
   混合检查(包活一些有用的比如非必须的System.out和printstackTrace)
  它们的作用
  不像PMD,Checkstyle能够检查Javadoc注释;但是PMD提供了一项叫作CPD的很有用的功能,它检查代码的拷贝粘贴部分。我使用PMD找到的最频繁的错误是未使用的import语句,未使用的私有变量以及意外重复拼写。Checkstyle可以发现更多的错误。包括漏掉的Javadoc注释,超过80个字符的行、不合约定的变量名、用tab来代替空格等等。两个工具都允许创建自定义的规则。
  如果想在你的组织中使用它们中的一个,Checkstyle似乎更好一些:它检查公司编码约定的大多数项目。如果增强代码质量是主要目标,那PMD是一个好的选择。但是如果你想要更多的功能并真正使用工具来修改代码,应该试试Jalopy。
  Jalopy
  Jalopy是一个易于配置的源代码格式程序,它能检测并修补Java代码中大量的习惯性缺陷。Jalopy更像一个代码整理器而不是检查器。Jalopy的插件现在已经支持大多数IDE,而且多数是无缝集成。我发现Jalopy特别强大,能够干许多很酷的事情。例如,它可以修改代码缩进、对齐括号、使行宽符合某个字符长度、插入相关的Javadoc注释以及对import语句排序。Jalopy最好的地方是超级自定义功能。一个简单的用户界面就可以让你选择Jalopy的所有功能的开关,不需要XML配置文件。
  不要浪费资源
  我建议大家使用这些工具来代替那些费时费力却收效甚微的人工代码检查工作。一旦使用这些工具将代码检查变成了一个相对轻松的任务,你就可以把代码检查作为一项普通工作而不是在项目结尾被进度逼得一团糟时做的事情。这些工具也提供了与Apache Ant的集成,因此你可以每天运行这些代码检查器,在编译或执行单元测试它们也能工作得很好。控制好你的代码,并交付那些你真的认为是高质量的东西。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:241394次
积分:6673
积分:6673
排名:第2950名
原创:390篇
转载:358篇
(3)(5)(12)(28)(16)(50)(39)(33)(26)(9)(16)(22)(32)(20)(185)(254)中国评测:源代码检测的终极奥义
发表于 14:55|
来源社区供稿|
摘要:在中国软件评测中心工作的几年中,作者参与过多个大型源代码测试项目,发现很多单位的软件产品大都为外包开发,源代码安全无法控制,产品使用一段时间后出现问题。
随着整个社会信息化程度的提高,各行业已经越来越多的依赖于各类软件产品,随着各类软件产品的增多,各类软件安全漏洞也相继出现。为了避免安全漏洞的出现,源代码测试越来越受到开发人员的重视。源代码测试可以找出软件潜在的安全漏洞,通过分析安全漏洞产生的原因,帮助开发人员发现当前软件开发过程中的软件缺陷,以便及时修复。源代码测试可以提高源代码的质量,保证软件的安全。
近日Apache官方发布安全公告(官方编号S2-032/CVE编号CVE-),Apache Struts2服务在开启动态方法调用的情况下,可以被远程执行任意命令,安全威胁程度高,该漏洞影响范围广泛除了会影响银行与互联网企业以外,还可能影响政府、证券、保险等行业,产生该漏洞的主要原因为Struts2底层代码文件DefaultActionMapper.java未对其成员变量输入值进行有效的过滤,可以通过源代码安全检测来检查使用了Struts2的软件产品是否存在此漏洞,可通过检测Struts2的配置文件中struts.enable.DynamicMethodInvocation的值是否设置为false,若为false则程序关闭了动态方法调用,规避了风险,若未关闭,则可通过检测Struts2版本来判断是否存在该高风险漏洞。
二、常见漏洞及解决方法
源代码测试中常见漏洞:
1)SQL注入,造成SQL注入的主要原因是因为软件产品没有对攻击者的输入数据进行适当的编码和过滤,就用于数据库查询,攻击者可提交一段数据库查询代码,使应用程序执行未预见的数据库查询,从而可以查看、修改或删除数据库条目或表。若要避免SQL注入漏洞,则需要对输入的数据进行验证,数字型的输入必须是合法的数字,字符型的输入中对特殊字符进行特殊处理,验证所有的输入点,包括Get、Post、Cookie以及Http头;使用符合规范的数据访问语句,使用参数化查询语句,如使用Preparedstatement实例进行查询。
2)跨站脚本漏洞,产生跨站脚本漏洞主要是因为攻击者往软件产品页面里插入恶意的Html代码,当用户浏览该页之时,嵌入其中的恶意代码就会被执行,从而达到伤害用户的目的。解决跨站脚本漏洞主要的解决方式主要有三种:拦截器过滤,作者在过去的工作实践中发现许多单位都会采用黑名单的方式,对输入数据进行拦截过滤,采用此种方式可大大减轻编码人员的工作量,只需要将需要拦截的特殊字符写入黑名单中,在配置文件中配置一下即可,但是此种方法也存在弊端,黑名单中的特殊字符大都不够完整,需要有人定期对黑名单中的特殊字符定期进行维护;输入编码,输入编码往往可以有全局的解决方案,从设计的角度来说这是最佳方案;输出编码,输出编码有利于开发者细粒度控制输出,但也导致了工作量的增加,输出编码可以解决输入编码无法处理的已存入数据库中的数据。
3)跨站请求伪造,跨站请求伪造主要是由于服务器未对数据的来源进行验证,从而导致应用的访问者被攻击者窃取或者曹总客户会话和Cookie,从而攻击者可以用该用户身份查看或者变更用户记录以及执行事务。跨站请求伪造主要的解决方案有:检查Http头部Refer信息,Server端在收到请求之后,可以去检查这个头信息,只接受来自本域的请求,忽略外部域的请求;使用一次性令牌,每个请求都带上一个由服务器生成的随机数,然后在服务器端核对该参数,如果和下发的随机数不同,则可以认为有人在伪造请求;使用验证图片,验证信息很难被恶意程序在客户端识别,因此能够提高更强的保护。
4)文件上传漏洞,文件上传漏洞大都是由于软件产品可上传可执行文件,作者在过去的工作实践中发现,造成文件上传漏洞还可能是因为只使用客户端脚本对上传文件类型进行验证。解决方法可以使用黑名单限制上传文件的类型,黑名单中禁止上传的文件格式可能并不全面,最好采用白名单,严格限制上传文件的格式是比较明智的选择。源代码的安全漏洞种类有很多并且根据语言的不同漏洞的种类也不尽相同,本文就不一一介绍。
三、检测手段
中国评测认为,常用的源代码安全检测方法主要是静态分析和动态测试两种。
静态分析可通过人工检查代码或源代码静态检测工具扫描源程序然后再进行人工分析,从中找出结构异常、控制流异常及数据流异常等可能导致错误的异常点。静态分析不依赖于特定的运行环境,容易实现,因此可以用来进行源代码静态安全性分析的软件种类较多。目前源代码静态安全性分析的检测软件大都采用模型检验、词法分析、语义分析等方法。
动态测试通过将测试的对象运行起来来发现代码在运行的过程中可能出现的问题,这样能更直观地发现问题,与静态分析相比,动态测试的过程更复杂,并且对测试人员的技术水平和经验要求更高,首先要搭建测试环境对软件产品所运行的实际场景进行仿真、模拟;然后需要测试人员根据待测软件的缺陷可能分布情况设计出全面、典型的测试用例;最后要对测试数据的结果数据进行分析,这一步任务量大又繁琐,一般是通过动态分析工具完成的。
对于源代码的测试来说,通常需要静态测试和动态测试相结合。动态测试可参考静态测试的结果,通过静态分析可以发现程序中使用频率高的函数、复杂的模块等信息,动态测试时我们就可以利用这些信息有针对性地设计测试用例。另外,可通过动态测试来验证静态分析时发现的漏洞。而在动态测试时发现的漏洞又需要通过在代码静态分析中加以确认,总之静态分析是源代码测试的基础,动态分析是代码测试的有效手段,两者相辅相成。
在中国软件评测中心工作的几年中,作者参与过多个大型源代码测试项目,发现很多单位的软件产品大都为外包开发,源代码安全无法控制,产品使用一段时间后出现问题,于是找来中国软件评测中心专业团队对系统的源代码进行检测,有的单位的软件产品大都经过多次升级,代码量巨大,代码中发现的问题数量多得惊人,并且软件产品的代码通常是由数名程序员合作开发完成,这些程序员有的已离职,交给对历史代码不熟悉的程序员来说修改起来是非常困难,工作量也是巨大的。作者认为要提高软件产品的源代码的安全性,首先要在软件开发初期就对代码的安全性进行控制,提高开发人员的安全意识,聘请评测中心专业人员对员工进行编码安全培训,并在开发的过程中重视对源代码的检测。
声明:CSDN登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章}

我要回帖

更多关于 组织机构代码有效期 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信