XSS攻击

XSS攻击全称跨站脚本攻击

XSS攻击的危害包括
  1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  3、盗窃企业重要的具有商业价值的资料
  4、非法转账
  5、强制发送电子邮件
  6、网站挂马
  7、控制受害者机器向其它网站发起攻击
基于代码修改的防御
  步骤1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
  步骤2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
  步骤3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
当然,如上操作将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞。
 
这里有些代码可以参考下

public class ValidateFilePath {
// 非法的字符集
private static final String[] INVALID_CHARS = new String[] { "<", ">", "\'", "\"", "&" };

// 统一替换可能造成XSS漏洞的字符为全角中文字符
private static final String[] VALID_CHARS = new String[] { "&it;", "&gt;", "&acute;" ,"&quot;", "&amp;" };
  /**
  * 验证 字符串只能包含 中文+ 英文+ 数字+ 下划线+. 不包含 ".." 符号
  * @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;
}

}

 
posted @ 2017-10-17 14:22  茅毛  阅读(182)  评论(0编辑  收藏  举报