返回

敏锐洞察:Java常见漏洞Bug解析及防范指南

后端

处理项目扫描出来的一些常见漏洞bug(java相关)

  1. 写在前面

    很多时候,一些项目,或许都会有一定的系统安全要求。一般常见于政府项目比较多!!! 项目做完交付后,经过 甲方验收通过之后,甲方也是会进行漏洞扫描的。

    1.1 漏洞扫描

    在甲方验收后,过不了多久甲方就会发过来一个项目质量扫描报告。可能是存在 1 处高危漏洞、2 处中危漏洞、3 处低危漏洞。 1 处高危漏洞估计 99% 的项目都会有,那就是:

    应用存在信息泄露漏洞

    1. 漏洞产生原因

    产生信息泄露的根本原因是jar包对外开放了服务接口,如果存在信息泄露漏洞,一般就是导致了我们的应用接口被别人所利用。获取一些本不应公开的数据信息。

    1. 处理办法

    2. 可以针对jar包对外暴露出来的接口,进行安全验证,例如增加接口鉴权,才可以访问接口。

    3. 如果是启用了web服务器,例如tomcat、jetty等。可以对服务器进行安全加固。例如可以修改 web 服务器的默认端口,默认端口为 8080,那修改成一个很少人知道的端口号,例如 9999 等。

    4. 如果jar包是上传到公网上的,而且不对外开放接口的话。那也很有可能就是jar包的代码被别人逆向了,然后针对包进行分析。发现了存在信息泄露的问题。

    5. jar包的使用

    一般上传至maven中央仓库的jar包都是安全的。根据实际业务需要,可以自己开发一些代码,然后制作成jar包进行上传,并且限制jar包的使用范围,限制jar包的访问权限,防止jar包的代码被逆向出来。

  2. 业务漏洞

    1. 存在恶意代码注入问题

    这种问题是比较容易产生的,存在两种情况:

    • Java代码中的任意代码执行

    • 代码注入

    2.1 Java代码中的任意代码执行

    在对参数进行直接拼接时,没有对参数进行过滤,导致了恶意参数可以进行代码注入。

    2.2 代码注入

    也是因为没有对输入参数进行过滤,导致了前端页面的传过来的参数,存在恶意参数,执行时由于没有对参数进行过滤,存在恶意参数,导致了恶意参数被执行。

    3. 处理办法

    String param = request.getParameter("param");
    param = param.replaceAll("[^a-zA-Z0-9]", "");
    

    3.1 解决方法一

    对输入的参数,进行正则表达式的匹配,过滤掉非法字符。

    3.2 解决方法二

    对参数进行Base64编码后,进行匹配。

    String param = request.getParameter("param");
    param = Base64.getEncoder().encodeToString(param.getBytes());
    param = param.replaceAll("[^a-zA-Z0-9]", "");
    
  3. 總結

    在项目开发过程中,要时刻注意代码安全,要尽量避免出现以上这些漏洞,如果发现漏洞,要及时修复,防止被黑客利用,造成更大的损失。