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);