敏锐洞察:Java常见漏洞Bug解析及防范指南
2023-10-13 08:45:30
处理项目扫描出来的一些常见漏洞bug(java相关)
-
写在前面
很多时候,一些项目,或许都会有一定的系统安全要求。一般常见于政府项目比较多!!! 项目做完交付后,经过 甲方验收通过之后,甲方也是会进行漏洞扫描的。
1.1 漏洞扫描
在甲方验收后,过不了多久甲方就会发过来一个项目质量扫描报告。可能是存在 1 处高危漏洞、2 处中危漏洞、3 处低危漏洞。 1 处高危漏洞估计 99% 的项目都会有,那就是:
应用存在信息泄露漏洞
- 漏洞产生原因
产生信息泄露的根本原因是jar包对外开放了服务接口,如果存在信息泄露漏洞,一般就是导致了我们的应用接口被别人所利用。获取一些本不应公开的数据信息。
-
处理办法
-
可以针对jar包对外暴露出来的接口,进行安全验证,例如增加接口鉴权,才可以访问接口。
-
如果是启用了web服务器,例如tomcat、jetty等。可以对服务器进行安全加固。例如可以修改 web 服务器的默认端口,默认端口为 8080,那修改成一个很少人知道的端口号,例如 9999 等。
-
如果jar包是上传到公网上的,而且不对外开放接口的话。那也很有可能就是jar包的代码被别人逆向了,然后针对包进行分析。发现了存在信息泄露的问题。
-
jar包的使用
一般上传至maven中央仓库的jar包都是安全的。根据实际业务需要,可以自己开发一些代码,然后制作成jar包进行上传,并且限制jar包的使用范围,限制jar包的访问权限,防止jar包的代码被逆向出来。
-
业务漏洞
- 存在恶意代码注入问题
这种问题是比较容易产生的,存在两种情况:
-
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]", "");
-
總結
在项目开发过程中,要时刻注意代码安全,要尽量避免出现以上这些漏洞,如果发现漏洞,要及时修复,防止被黑客利用,造成更大的损失。