在过滤器中判断URL是否被注入

本文介绍如何通过Java Servlet API获取HTTP请求的各种信息,并实现一个用于防止SQL注入攻击的过滤器。该过滤器能够检查请求URL中是否包含敏感字符,并在发现潜在威胁时将用户重定向到主页。
巩固知识:
//获取来源URL:
String fromURL = request.getHeader("Referer");

// /ssm/ser.do
String url = request.getRequestURI();

// http://localhost:8080/ssm/ser.do
StringBuffer url_buffer = request.getRequestURL();

//常用的request头信息
out.println("Protocol: " + request.getProtocol());
out.println("Scheme: " + request.getScheme());
out.println("Server Name: " + request.getServerName() );
out.println("Server Port: " + request.getServerPort());
out.println("Protocol: " + request.getProtocol());
out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
out.println("Remote Addr: " + request.getRemoteAddr());
out.println("Remote Host: " + request.getRemoteHost());
out.println("Character Encoding: " + request.getCharacterEncoding());
out.println("Content Length: " + request.getContentLength());
out.println("Content Type: "+ request.getContentType());
out.println("Auth Type: " + request.getAuthType());
out.println("HTTP Method: " + request.getMethod());
out.println("Path Info: " + request.getPathInfo());
out.println("Path Trans: " + request.getPathTranslated());
out.println("Query String: " + request.getQueryString());
out.println("Remote User: " + request.getRemoteUser());
out.println("Session Id: " + request.getRequestedSessionId());
out.println("Request URI: " + request.getRequestURI());
out.println("Servlet Path: " + request.getServletPath());
out.println("Accept: " + request.getHeader("Accept"));
out.println("Host: " + request.getHeader("Host"));
out.println("Referer : " + request.getHeader("Referer"));
out.println("Accept-Language : " + request.getHeader("Accept-Language"));
out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));
out.println("User-Agent : " + request.getHeader("User-Agent"));
out.println("Connection : " + request.getHeader("Connection"));
out.println("Cookie : " + request.getHeader("Cookie"));
out.println("Created : " + session.getCreationTime());
out.println("LastAccessed : " + session.getLastAccessedTime());



***********************************************
web.xml
<filter>
<filter-name>URLFilter</filter-name>
<filter-class>com.shctc.util.URLFilter</filter-class>
<init-param>
<param-name>sqlInj</param-name>
<param-value>java|String|and|exec|insert|select|delete|update|*|chr|mid|master|truncate|char|declare|;|-|+|,</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>URLFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>



Filter
public class URLFilter implements Filter{

private static final long serialVersionUID = 12345L;

Logger log =Logger.getLogger(URLFilter.class);
private FilterConfig config=null;
private String sqlInj="";

public void init(FilterConfig config) throws ServletException{
this.config=config;
log.debug("FilterConfig:"+config);
sqlInj=config.getInitParameter("sqlInj");
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String UserIP = request.getRemoteAddr();
String requestURL = req.getRequestURL()+ req.getQueryString();
log.debug("******请求用户来源:"+req.getHeader("Referer"));
log.debug("******请求用户IP地址:"+UserIP);
log.debug("******请求URL:"+requestURL);

String[] inj_stra=sqlInj.split("\\|");
for (int i=0; i < inj_stra.length; i++){
if (requestURL.indexOf(inj_stra[i])>=0){
log.debug("******返回主页了,因为请求URL中含有敏感字符:"+inj_stra[i]);
resp.sendRedirect("page/index.action");
return;
}
}

//如果存在下一个dofilter方法,则调用下一个过滤器的dofilter方法;否则一直停在这
chain.doFilter(request, response);
}

public void destroy(){
config=null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值