java 安全漏洞_安全漏洞之Java

本文介绍了Java应用中常见的安全问题,包括反射型XSS、持久化XSS、DOM型XSS、文件路径泄露、资源未释放、双检锁问题、日志伪造、系统信息泄漏、开放重定向和竞态条件。提供了针对性的解决方案,如使用c:out转义、过滤非法字符、编写安全错误消息和验证输入路径等。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/ru_li/article/details/79915948

1.跨站脚本攻击

(1)Cross-Site Scripting(XSS):Reflected:jsp取值漏洞,使用c:out转义

var params_rf = "";

var params_rf = "";

Cross-Site Scripting: Persistent、Cross-Site Scripting: DOM

2.File Disclosure:使用的是由未经验证的输入创建的路径

过滤路径中的特殊字符,或者路径不让用户输入,在配置文件中配置相关路径

3.Unreleased Resource: Streams

资源未释放,一般在try中创建资源,finally中释放资源

4.Double-Checked Locking

5、Log Forging:

最直接的方法就是删除漏洞的日志打印,但删除后,项目上线一旦出现故障,就无法通过查日志定位问题所在,所以这个方法可行但后期维护不方便;另外一个方法就是封装一个打印日志的公共类,但这种方法也只是能够降低漏洞数量,无法解决这个漏洞;最号就是要过滤掉非法字符:

public static String validLog(String log) {

List list = new ArrayList();

list.add("%0d");

list.add("\r");

list.add("%0a");

list.add("\n");

String encode = Normalizer.normalize(log, Normalizer.Form.NFKC);

for (int i = 0; i < list.size(); i++) {

encode = encode.replace(list.get(i), "");

}

return encode;

}

6、System Information Leak:External 系统信息泄漏

情况:

PrintWriter out = resp.getWriter(); try {

...

} catch (Exception e) { out.write(e.getMessage()); } }

解决:

编写错误消息时,始终要牢记安全性。尽量自己编写错误信息,不要直接把系统错误回显到客户端。

7、Open Redirect

参见:https://www.cnblogs.com/meInfo/p/9037547.html

8、Race Condition: Singleton Member Field

将成员变量修改成局部变量

9、Path Manipulation

加入以下验证(尚未校验)

HashMap map = new HashMap();

map.put("a", "a");

map.put("b", "b");

map.put("c", "c");

map.put("d", "d");

map.put("e", "e");

map.put("f", "f");

map.put("g", "g");

map.put("h", "h");

map.put("i", "i");

map.put("j", "j");

map.put("k", "k");

map.put("l", "l");

map.put("m", "m");

map.put("n", "n");

map.put("o", "o");

map.put("p", "p");

map.put("q", "q");

map.put("r", "r");

map.put("s", "s");

map.put("t", "t");

map.put("u", "u");

map.put("v", "v");

map.put("w", "w");

map.put("x", "x");

map.put("y", "y");

map.put("z", "z");

map.put("A", "A");

map.put("B", "B");

map.put("C", "C");

map.put("D", "D");

map.put("E", "E");

map.put("F", "F");

map.put("G", "G");

map.put("H", "H");

map.put("I", "I");

map.put("J", "J");

map.put("K", "K");

map.put("L", "L");

map.put("M", "M");

map.put("N", "N");

map.put("O", "O");

map.put("P", "P");

map.put("Q", "Q");

map.put("R", "R");

map.put("S", "S");

map.put("T", "T");

map.put("U", "U");

map.put("V", "V");

map.put("W", "W");

map.put("X", "X");

map.put("Y", "Y");

map.put("Z", "Z");

map.put(":", ":");

map.put("/", "/");

map.put("\\", "\\");

String temp = "";

for (int i = 0; i < path.length(); i++) {

if (map.get(path.charAt(i)+"")!=null) {

temp += map.get(path.charAt(i)+"");

}

}

path = temp;

File proFile = new File(path);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值