漏洞
WEB漏洞-链接注入-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(编码)-A3 跨站脚本(XSS)WEB漏洞-错误信息跨站-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(Base64)-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(img-onload)-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(img-src)-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(tab)-A3 跨站脚本(XSS)WEB漏洞-跨站脚本攻击漏洞(onload)-A3 跨站脚本(XSS)WEB漏洞-框架钓鱼-A1 注入WEB漏洞-盲注漏洞(数字或-2)-A1 注入WEB漏洞-盲注漏洞(Cookie内数字)-A1 注入WEB漏洞-盲注漏洞(搜索逻辑)-A1 注入WEB漏洞-盲注漏洞(字符Like)-A1 注入
添加过滤器过滤参数 在项目中添加重写后的拦截器(根据需求还得改)/XssHttpServletRequestWrapper.java 在项目中添加过滤器/XssFilter.java 在web.xml配置:
<filter>
<filter-name>XssSqlFilter
</filter-name>
<filter-class>com.mingsoft.cms.util.XssFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>XssSqlFilter
</filter-name>
<url-pattern>/cms/*
</url-pattern>
<dispatcher>REQUEST
</dispatcher>
</filter-mapping>
XssFilter.java
package com
.mingsoft
.cms
.util
;
import java
.io
.IOException
;
import javax
.servlet
.Filter
;
import javax
.servlet
.FilterChain
;
import javax
.servlet
.FilterConfig
;
import javax
.servlet
.ServletException
;
import javax
.servlet
.ServletRequest
;
import javax
.servlet
.ServletResponse
;
import javax
.servlet
.http
.HttpServletRequest
;
public class XssFilter implements Filter {
FilterConfig filterConfig
= null
;
public void init(FilterConfig filterConfig
) throws ServletException
{
this.filterConfig
= filterConfig
;
}
public void destroy() {
this.filterConfig
= null
;
}
public void doFilter(ServletRequest request
, ServletResponse response
, FilterChain chain
)
throws IOException
, ServletException
{
chain
.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest
) request
), response
);
}
}
XssHttpServletRequestWrapper.java
package com
.mingsoft
.cms
.util
;
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Set
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletRequestWrapper
;
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper{
public XssHttpServletRequestWrapper(HttpServletRequest servletRequest
) {
super(servletRequest
);
}
@Override
public Map
<String
, String
[]> getParameterMap(){
Set
<String> names
= super.getParameterMap().keySet();
Map
<String
, String
[]> parameterMap
= new HashMap<String
, String
[]>(names
.size());
for (String name
: names
) {
String
[] values
= getParameterValues(name
);
String
[] newValues
= new String [values
.length
];
for(int i
=0;i
<values
.length
;i
++) {
newValues
[i
] = cleanXSS(values
[i
]);
}
parameterMap
.put(name
, newValues
);
values
= null
;
newValues
= null
;
}
return parameterMap
;
}
@Override
public String
[] getParameterValues(String parameter
) {
String
[] values
= super.getParameterValues(parameter
);
if (values
== null
) {
return null
;
}
int count
= values
.length
;
String
[] encodedValues
= new String[count
];
for (int i
= 0; i
< count
; i
++) {
encodedValues
[i
] = cleanXSS(values
[i
]);
}
return encodedValues
;
}
@Override
public String
getParameter(String parameter
) {
String value
= super.getParameter(parameter
);
if (value
== null
) {
return null
;
}
return cleanXSS(value
);
}
@Override
public String
getHeader(String name
) {
String value
= super.getHeader(name
);
if (value
== null
)
return null
;
return cleanXSS(value
);
}
private String
cleanXSS(String value
) {
String inj_str
= "\" ) \' \\* % < > &";
String inj_stra
[] = inj_str
.split(" ");
for (int i
= 0; i
< inj_stra
.length
; i
++) {
value
= value
.replaceAll("[" + inj_stra
[i
] + "]", "");
}
String badStr
= "and exec execute insert select delete update count drop chr mid master truncate " +
"char declare sitename net user xp_cmdshell or like and exec execute insert create drop " +
"table from grant use group_concat column_name " +
"information_schema.columns table_schema union where select delete update order by count " +
"chr mid master truncate char declare or like";
String badStrs
[] = badStr
.split(" ");
for (int i
= 0; i
< badStrs
.length
; i
++) {
value
= value
.replaceAll(badStrs
[i
].toLowerCase(), "");
value
= value
.replaceAll(badStrs
[i
].toUpperCase(), "");
}
value
= value
.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
value
= value
.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
value
= value
.replaceAll("'", "& #39;");
value
= value
.replaceAll("eval\\((.*)\\)", "");
value
= value
.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value
= value
.replaceAll("script", "");
value
= value
.replaceAll("iframe", "");
value
= value
.replaceAll("img", "");
return value
;
}
}