XSS攻击
XSS攻击全称跨站脚本攻击
public class ValidateFilePath {
// 非法的字符集
private static final String[] INVALID_CHARS = new String[] { "<", ">", "\'", "\"", "&" };
// 统一替换可能造成XSS漏洞的字符为全角中文字符
private static final String[] VALID_CHARS = new String[] { "⁢", ">", "´" ,""", "&" };
/**
* 验证 字符串只能包含 中文+ 英文+ 数字+ 下划线+. 不包含 ".." 符号
* @param pathStr
* @return boolean
*/
public static boolean validateFilePath(String pathStr){
boolean validate1 = false;
boolean validate2 = false;
//1. 正则表达式 验证 字符串只能包含 中文+ 英文+ 数字+ 下划线+.
String pattern1 = "^[a-zA-Z0-9_/.\u4e00-\u9fa5]+$";
Pattern pattern = Pattern.compile(pattern1);
Matcher matcher=pattern.matcher(pathStr);
validate1 = matcher.matches();
//2. 不包含 ".." 符号
if(pathStr.indexOf("..") == -1 ){
validate2 = true;
}
return validate1 && validate2;
}
/**
* 去除路径中的 ..
* @param pathStr
* @return
*/
public static String deleteDoublePoint(String pathStr){
return pathStr.replace("..", "");
}
/**
* 替换非法字符以及危险关键字
*
* @param str
* @return
*/
public static String replaceSpecialChars(String str) {
for (int j = 0; j < INVALID_CHARS.length; ++j) {
if (str.indexOf(INVALID_CHARS[j]) >= 0) {
str = str.replace(INVALID_CHARS[j], VALID_CHARS[j]);
}
}
str=str.trim();
return str;
}
}