我在测试自己网站http://www.xxx.com/">alert(55) 敲这样一个链接会弹窗 查询了一下应该是存在XSS漏洞吧 求大神告知该如何修复呢
配起来有点麻烦,大概就下面的思路,你在网上找找吧
[#escape x as htmlEnc(x)]
[/#escape]
public class HtmlEncFunction implements TemplateMethodModel {
private static final String EMPTY = "";
/**
*
* 特殊字符转义.
*
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
*/
@Override
public Object exec(List arguments) throws TemplateModelException {
String result = EMPTY;
if (CollectionUtils.isNotEmpty(arguments)) {
Object param = arguments.get(0);
if (param instanceof String) {
result = (String) param;
if (StringUtils.isNotBlank(result)) {
result = ESAPI.encoder().encodeForHTML(result);
}
}
}
return result;
}
public static String cleanXSS(String value) {
if (StringUtils.isNotBlank(value)){
value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", ")");
value = value.replaceAll("'", "& #39;");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",
"\"\"");
value = value.replaceAll("script", "");
}
return value;
}
}
具体执行的方式有以下几点:
第一、在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
第二、在输出方面,在用户输内容中使用
标签。标签内的内容不会解释,直接显示。第三、严格执行字符输入字数控制。
四、在脚本执行区中,应绝无用户输入。
基本上处理方式 都是使用过滤器,过滤掉特殊字符。网上有比较全的过滤代码。
请记住两条原则:过滤输入和转义输出。
具体执行的方式有以下几点:
第一、在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
第二、在输出方面,在用户输内容中使用
标签。标签内的内容不会解释,直接显示。第三、严格执行字符输入字数控制。
四、在脚本执行区中,应绝无用户输入。
用过滤器,把这种xxs过滤掉
尝试对用户的输入进行严格的过滤,<>/script''alert()之类的,最好就白名单吧。