相关文章推荐
跑龙套的皮蛋  ·  PostgreSQL遍历Record各例的值 ...·  2 月前    · 
想表白的紫菜汤  ·  如何配置for-each节点来循环遍历_大数 ...·  3 周前    · 
踏实的墨镜  ·  PostgreSQL:遍历文本数组并执行SQ ...·  1 周前    · 
高大的椰子  ·  判断是否工作在docker环境-CSDN博客·  11 月前    · 
豪情万千的豆腐  ·  在ElasticSearch的查询字符串语法 ...·  1 年前    · 
幸福的番茄  ·  java - ...·  1 年前    · 
考研的麦片  ·  Unity与Android ...·  1 年前    · 
乖乖的蘑菇  ·  ruby中的整数、浮点数、字符串之间的相互转 ...·  1 年前    · 
Code  ›  奇安信-源代码安全缺陷问题解决记录:路径遍历、API误用、配置文件明文_api误用:不安全的框架绑定_韧小钊的博客
上传文件 漏洞 遍历
https://blog.csdn.net/qq_36434219/article/details/127659944
耍酷的铁板烧
1 年前
  • pom.xml: 引入commons-io
    <
    
    
    
    
        
    dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.4</version>
    </dependency>
    
  • 代码替换
    File file = new File(logpath);
    FileInputStream logfile = new FileInputStream(file);          
    
    替换为
    import org.apache.commons.io.FileUtils;
    File file = FileUtils.getFile(logpath);
    FileInputStream logfile = FileUtils.openInputStream(file);
    

    API误用-不安全的框架绑定

    • @InitBinder 只对当前Controller生效,因此可以创建BaseController,其他Controller直接继承该类
      import org.springframework.web.bind.WebDataBinder;
      import org.springframework.web.bind.annotation.InitBinder;
      import org.springframework.web.bind.annotation.RestController;
       * 奇安信 Controller.
       * @author lw-rxz
      @RestController
      public class BaseController {
          @InitBinder
          public void initBinder(WebDataBinder binder) {
              binder.setDisallowedFields("test");
      
    • 针对@RequestBody传参, @InitBinder 是无效的,因此通过@JsonIgnoreProperties(ignoreUnknown = true)解决
      在这里插入图片描述

    密码管理-配置文件中的明文密码

    jasypt

    • pom.xml:引入jasypt

      <dependency>
           <groupId>com.github.ulisesbocchio</groupId>
           <artifactId>jasypt-spring-boot-starter</artifactId>
           <version>2.0.0</version>
       </dependency>
      

      在这里插入图片描述
      BasicTextEncryptor对应jar包org\jasypt\jasypt\1.9.2\jasypt-1.9.2.jar

    • 生成密钥,替换配置文件

      import org.jasypt.util.text.BasicTextEncryptor;
       * 生成密文.
       * @author lw-rxz
      public class JasyptUtils {
          public static void main(String[] args) {
              //PBEWithMD5AndDES
              BasicTextEncryptor encryptor = new BasicTextEncryptor();
              encryptor.setPassword("key");
              System.out.println(encryptor.encrypt("%8Y!R-PHSA1LJ9_z"));
              System.out.println(encryptor.decrypt("gZdoGpddkg8dCtdlYmjlAulXUo+Cqr6/LgxcUgfmVOE="));
      
      jasypt:
        encryptor:
          password: key
      

      也可以自定义的密码串标识,默认为:ENC(…)

       property:
            prefix: "xx@["
            suffix: "]"
      

      jasypt一开始引入的2.1.1版本,结构导致校验包javax.validation失效,换成2.0.0即可

      <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
          <version>2.0.1.Final</version>
      </dependency>
      

      依然报明文缺陷

      jasypt:
        encryptor:
          password: key #依然报明文缺陷
      

      替换为环境变量或者作为命令行传入:
      在这里插入图片描述
      官网

      --jasypt.encryptor.password=key
      
      -Djasypt.encryptor.password=password
      

      null引用

      • 主要为了防止空指针,实际上都没有问题,比如baseMapper.selectList(null);但还会提示缺陷,这种可以通过创建常量null

         public static Object NULL = null;
         baseMapper.selectList((XXX)NULL );//需要转换一下,比如(Test)NULL
        
      • 还有一种就是创建空对象,不要使用null

        QueryWrapper queryMapper = null;
        if (name!= null) {
             queryMapper = new  QueryWrapper<>();
             queryMapper.eq("name", name);
        baseMapper.selectList(queryMapper)
        

        替换为:

        QueryWrapper queryMapper = new  QueryWrapper<>();
        if (name!= null) {
             queryMapper.eq("name", name);
        baseMapper.selectList(queryMapper)
        

        除了明文处理,其他几种缺陷感觉非常多此一举,仅仅就是为了不被扫描到缺陷,所以上面很多改动的意义也仅仅是为了通过扫描。

        20230912------------又开始了,发现一份官方文档,可以参考下:
        奇安信漏洞说明
        在这里插入图片描述

        2. 在服务端对上传文件进行检查: (1)使用白名单控制上传文件类型,即只允许指定扩展名的文件上传。 (2)对上传文件后缀与MIME Type进行匹配校验, 对文件头信息与文件后缀进行匹配校验。 (3)对单个文件大小和总文件数进行限制, 避免拒绝服务攻击。 (4)对文件名进行输入校验,显示时进行输出编码。 3. 文件存储: (1)上传文件应保存在指定路径下。 (2)对上传文件进行随机数重命名,避免文件被覆盖。 (3)设置上传文件路径, 使用户不能轻易访问自己上传的文件 。 (4) 文件应尽量保存在内容服务器或web目录外部,避免通过web应用直接访问上传的文件。 4. 对于图片文件进行二次渲染、压缩, 避免图片写马。 5. 校验失败后,记录错误日志信息,内容至少包括时间、用户、IP、操作内容、校验失败
        关于 API 安全的问题,主要就是以下几个问题 一、身份鉴定。 这个可以使用 Oauth 2.0 规范,或者带有不对称密钥加密的 token,选择 JWT 等形式,配合身份鉴定系统来保证。 二、内容防篡改。 可以使用数字签名算法来进行哈希校验,强制 HTTPS 通信。最新的系统可以考虑 http/2。 三、DDoS 攻击。 通过设置防火墙,控制 API 调用频率,例如协议的 rate-limit 等设置来进行沟通和控制。 四、注入攻击。这个需要从输入校验、编解码、输入过滤和转化方面着手,主流框架都有基本的防
        Dos批处理命令-遍历文件输出文件路径实例(内含三个例子)-001 ①.遍历文件夹内指定后缀文件(输出详细信息不带路径) ②.遍历文件夹内指定后缀文件(只输出文件全路径) ③.遍历指定磁盘所有的文件(指定后缀全路径输出)
        该插件需要Grunt。 如果您以前从未使用过 ,请务必查看《指南》,因为它说明了如何创建以及安装和使用Grunt插件。 熟悉该过程后,可以使用以下命令安装此插件: npm install changeref --save-dev 插件安装完成后,可以使用以下JavaScript代码在您的Gruntfile中启用该插件: grunt . loadNpmTasks ( 'changeref' ) ; “ changeref”任务 在项目的Gruntfile,添加一个名为段changeref到传送到数据对象grunt.initConfig() 。 grunt . initConfig ( { changeref : { options : { // Task-specific option
        java代码审计系统课程--代码审计视频教程-信息安全-CSDN程序员研修院少写“漏洞” 了解常见代码安全 提升代码安全能力 代码不被黑客黑-https://edu.csdn.net/course/detail/32634 路径遍历漏洞代码/PathTraversal 第一个访问url为 windows: c:\boot.ini (系统版本) linux: http://localhost:8080/path_traversal/vul?filepath=../../../../../etc/pa
        2. 使用相对路径来代替绝对路径,这样可以避免绝对路径遍历漏洞的发生。 3. 对于需要使用绝对路径的情况,可以使用安全的方式来获取绝对路径,比如使用相对路径和当前工作目录来计算绝对路径。 4. 及时更新和修复已知的漏洞,以确保系统的安全性和稳定性。 希望以上措施能够帮助您解决绝对路径遍历漏洞问题。 Ashitaka23: 我用vue/cli 5.0.8 创建了一个vue2项目 安装less和less-loader要是报错 options should NOT have additional properties options should NOT have additional properties options should NOT have additional properties options should pass "instanceof" keyword validation options should match exactly one schema in oneOf 奇安信-源代码安全缺陷问题解决记录:路径遍历、API误用、配置文件明文 weixin_66496772: 一点问题 没解决a
 
推荐文章
跑龙套的皮蛋  ·  PostgreSQL遍历Record各例的值[遍历表的行和列]_postgresql record
2 月前
想表白的紫菜汤  ·  如何配置for-each节点来循环遍历_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心
3 周前
踏实的墨镜  ·  PostgreSQL:遍历文本数组并执行SQL开发者社区
1 周前
高大的椰子  ·  判断是否工作在docker环境-CSDN博客
11 月前
豪情万千的豆腐  ·  在ElasticSearch的查询字符串语法中,单引号和双引号有什么区别?-腾讯云开发者社区-腾讯云
1 年前
幸福的番茄  ·  java - 通过maven引入项目的jar包怎么查看源代码? - SegmentFault 思否
1 年前
考研的麦片  ·  Unity与Android Studio交互之 ✨ 获取手机权限(存储、录音、相机等)-阿里云开发者社区
1 年前
乖乖的蘑菇  ·  ruby中的整数、浮点数、字符串之间的相互转换_ruby 字符串转数字_DemonHunter211的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号