几款AI工具代码安全漏洞分析能力对比

     这段时间研究AI平台的能力。 今天我把库博检测工具发现的一个Java安全漏洞相关代码传到几款AI工具上进行分析,看看这几款工具反馈的结果。这些工具包括ChatGPT-3.5、Forefront Claude、AIChat(组合)和清华ChatGlm。

       首先我们看看库博检测出的这个漏洞是否存在。先在代码。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        /**

         * 文件下载

         * 有目录遍历攻击漏洞的代码

         */

            request.setCharacterEncoding("UTF-8");

            response.setContentType("text/html;charset=utf-8");

            response.setCharacterEncoding("utf-8");

            OutputStream out = null;

            //获取项目部署绝对路径下的upload文件夹路径,下载upload目录下面的文件

            String root = request.getServletContext().getRealPath("/upload");

            //获取文件名

            String filename = request.getParameter("filename");

            File file = new File(root + "/" + filename);

            //根据文件路径创建输入流

            FileInputStream fis = new FileInputStream(file);

            out=response.getOutputStream();

            //设置响应头,弹出下载框

           System.out.println(root + "/" + filename);

            //response.setContentType("application/x-msdownload");

           // response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));

            

            String agent = request.getHeader("USER-AGENT").toLowerCase();

            String name = new String(filename.getBytes(agent.indexOf("msie") != -1 ? "GBK" : CharEncoding.UTF_8), CharEncoding.ISO_8859_1);

            response.setContentType("application/octet-stream");

            response.setHeader("Content-Length""" + file.length());

            response.setHeader("Pragma""NO-cache");

            response.setHeader("Cache-Control""No-cache");

            response.setCharacterEncoding("UTF-8");

            response.setContentType("text/html");

            response.setDateHeader("Expires", -1);

            

            response.setHeader("Content-disposition""attachment;filename=" + name);

            //response.addHeader("Content-Length", "" + file.length());

            //byte[] b = new byte[fis.available()];

            byte[] b = new byte[1024];

            int len=0;

            while ((len=fis.read(b))!=-1)

                out.write(b,0,len);

            

            if(len==-1)

            {

                fis.close();

                request.getSession().setAttribute("message2","下载完成!");

                request.getRequestDispatcher("/filetraversal.jsp").forward(request, response);

            }

       }

库博检测是以安全漏洞维度展示的,所以点击某个漏洞类型,可以看到该安全漏洞对应的代码位置。当前这个版本没有以文件形式展示漏洞方式了(国内工具基本上都没有该功能,库博之前版本是有的)。

首先我们测试一下边界AICHAT,我们使用推荐模型组合,输入代码后,给出分析结果如下。

可以看到,AI引擎给找出来了多个缺陷,其中第一条就是我们最关注的路径遍历,能够给出来。第2条代码中不存在,但是3、5、6还的确是存在的问题。这样看,分析还是比较全面的。

使用国外AI工具Forefront Chat进行分析,该工具也是集成Chatgpt、Claude 1.2,该引擎是需要在互联网进行搜索,大概1分钟没有反馈出结果。

我们看Chatgpt官方网站上,使用Chatgpt-3.5引擎的分析结果。

分析上面的结果,可以看到发现了3个安全问题,第1个事路径遍历,第2个问题,国产AI工具也给出了类似结果。而第3个问题感觉是一个误报,因为在代码中进行流资源释放,但是是在一个分支进行了释放,应该算是一个误报。

我们再看看在清华大学的ChatGlm平台上的分析结果。

……………省略中间代码,见下面。

为了方便,我贴出所有返回的代码。

protected  void  doPost(HttpServletRequest  request,  HttpServletResponse  response)  throws  ServletException,  IOException  {

     //  TODO  Auto-generated  method  stub

     /**

       *  文件下载

       *  修复了目录遍历攻击漏洞的代码

       */

     request.setCharacterEncoding("UTF-8");

     response.setContentType("text/html;charset=utf-8");

     response.setCharacterEncoding("utf-8");

     OutputStream  out  =  null;

     //  获取项目部署绝对路径下的upload文件夹路径,下载upload目录下面的文件

     String  root  =  request.getServletContext().getRealPath("/upload");

     //  获取文件名

     String  filename  =  request.getParameter("filename");

     //  检查文件名是否符合预期

     if  (filename  ==  null  ||  filename.trim().isEmpty())  {

         response.sendError(HttpServletResponse.SC_BAD_REQUEST,  "Invalid  file  name");

         return;

     }

     //  限制用户可以下载的文件类型

     String  allowedExtensions  =  "txt,jpg,png,gif";

     String  fileExtension  =  filename.substring(filename.lastIndexOf('.')  +  1).toLowerCase();

     if  (!allowedExtensions.contains(fileExtension))  {

         response.sendError(HttpServletResponse.SC_BAD_REQUEST,  "Invalid  file  extension");

         return;

     }

     File  file  =  new  File(root  +  "/"  +  filename);

     //  使用ServletContext.getResourceAsStream()代替FileInputStream

      try  (InputStream  is  =  request.getServletContext().getResourceAsStream("/upload/"  +  filename))  {

         if  (is  ==  null)  {

             response.sendError(HttpServletResponse.SC_NOT_FOUND,  "File  not  found");

             return;

         }

         response.setContentType("application/octet-stream");

         response.setHeader("Content-Length",  String.valueOf(is.available()));

         response.setHeader("Pragma",  "NO-cache");

         response.setHeader("Cache-Control",  "No-cache");

         response.setCharacterEncoding("UTF-8");

         response.setContentType("text/html");

         response.setDateHeader("Expires",  -1);

         response.setHeader("Content-disposition",  "attachment;filename="  +  filename);

         byte[]  buffer  =  new  byte[1024];

         int  bytesRead;

         while  ((bytesRead  =  is.read(buffer))  !=  -1)  {

             out.write(buffer,  0,  bytesRead);

         }

     }  catch  (IOException  e)  {

         //  处理异常,例如记录日志、返回错误信息等

         e.printStackTrace();

     }

     if  (out  !=  null)  {

          try  {

             out.flush();

             out.close();

         }  catch  (IOException  e)  {

             //  处理异常,例如记录日志、返回错误信息等

             e.printStackTrace();

         }

     }

}

突然感觉清华大学的这个AI引擎功能强大,不但给出了4个问题,最亮眼的给出的修复后的代码,这段代码我还没有时间去替换原来代码去编译看看是否存在问题,但是这个功能足于领先了。为了验证引擎,我把返回的代码又贴了回去,让引擎分析分析是否存在漏洞。其反馈结果如下:

在其提供的修复代码的基础上又检测出的问题,其提供的修复代码中,增加了对于文件类型的限制。

通过这个例子说明,国内AI引擎有自己创新之处,但是在一些细节上还是存在瑕疵,需在在引擎或训练数据上做的更精细。

(结束)

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值