使用Servlet Filter来防止SQL注入的方法
参考:
http://618119.com/archives/2010/02/23/156.html
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 ReqFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
ReqHttpServletRequestWrapper reqRequest = new ReqHttpServletRequestWrapper(
(HttpServletRequest) request);
chain.doFilter(reqRequest, response);
}
public void destroy() {
}
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class ReqHttpServletRequestWrapper extends HttpServletRequestWrapper {
HttpServletRequest orgRequest = null;
public ReqHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
orgRequest = request;
}
/**
* 覆盖getParameter方法,将参数名和参数值都做req过滤。<br/>
* 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/>
* getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
*/
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null) {
value = reqEncode(value);
}
return value;
}
/**
* 覆盖getHeader方法,将参数名和参数值都做req过滤。<br/>
* 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> getHeaderNames 也可能需要覆盖
*/
/* @Override
public String getHeader(String name) {
String value = super.getHeader(reqEncode(name));
if (value != null) {
value = reqEncode(value);
}
return value;
}*/
/**
* 将容易引起req漏洞的半角字符直接替换成全角字符
*
* @param s
* @return
*/
private static String reqEncode(String s) {
if (s == null || "".equals(s)) {
return s;
}
StringBuilder sb = new StringBuilder(s.length() + 16);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '\'':
sb.append("′");// ´");
break;
case '′':
sb.append("′");// ´");
break;
case '\"':
sb.append(""");
break;
case '"':
sb.append(""");
break;
case '&':
sb.append("&");
break;
case '#':
sb.append("#");
break;
case '\\':
sb.append('¥');
break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
/**
* 获取最原始的request
*
* @return
*/
public HttpServletRequest getOrgRequest() {
return orgRequest;
}
/**
* 获取最原始的request的静态方法
*
* @return
*/
public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
if (req instanceof ReqHttpServletRequestWrapper) {
return ((ReqHttpServletRequestWrapper) req).getOrgRequest();
}
return req;
}
}
<filter>
<display-name>reqFilter</display-name>
<filter-name>reqFilter</filter-name>
<filter-class>jp.co.bsnw.servlet.ReqFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>reqFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
在 WEB 层我们可以过滤用户的输入来防止 SQL 注入。例如,可以使用 Filter 来过滤全局的表单参数。下面是一个简单的示例代码: ```java import java.io.IOException; import java.util.Iterator; import javax....
下面我们将深入探讨SQL注入的基本原理、为何需要防止以及如何在Java中实现过滤器(Filter)来防止此类攻击。 1. SQL注入基础: SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被...
为了解决这一问题,我们可以利用Java的Filter机制来创建一个防止SQL注入的URL过滤器。下面将详细介绍这个过滤器的工作原理、配置方法以及如何有效地防止SQL注入。 首先,我们需要理解SQL注入的基本概念。SQL注入是...
5. **使用预编译的SQL语句(PreparedStatement)**:除了过滤器之外,还应该使用PreparedStatement来执行SQL查询,因为它们可以自动防止基本的SQL注入攻击。预编译的语句会将参数与SQL语句分开处理,从而消除大部分...
为了保护系统免受此类攻击,开发者通常会采用各种方法来增强应用程序的安全性,其中一种有效的方式就是使用过滤器(Filter)来预防SQL注入。 #### 二、SQL注入基础 SQL注入是一种常见的安全漏洞,攻击者通过向输入...
通过使用自定义的Filter来防止SQL注入和XSS攻击是一种常见且有效的安全措施。本文介绍了如何实现一个简单的XssFilter,并详细解释了其工作原理。在实际项目中,开发者还可以根据具体的业务需求进一步完善过滤逻辑,...
为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器(Filter)进行SQL注入的过滤。本篇将详细探讨Java环境下如何实现一个SQL注入过滤器,并结合`web.xml`配置文件来部署...
下面是一个简单的Java Filter示例,展示了如何通过过滤器来防止SQL注入攻击: ```java public class SQLFilter implements Filter { private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%...
2. **SQL注入防护**:项目可能使用了Spring Data JPA、JdbcTemplate或MyBatis等持久层技术,这些库提供了防止SQL注入的功能。例如,通过使用参数化的`query()`或`update()`方法,可以确保即使输入含有恶意SQL片段,...
`Checksql`类实现了`javax.servlet.Filter`接口,主要负责对HTTP请求中的参数进行检查,以确保其不包含可能导致SQL注入攻击的字符或字符串。具体来说,该类的主要功能包括: - **初始化**:加载预定义的SQL注入...
原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,...
本文将详细介绍如何使用Java Filter实现防止SQL注入的功能。 首先,我们需要创建一个实现了`javax.servlet.Filter`接口的类,例如名为`XSSFilter`。这个类将负责拦截请求并处理可能存在的SQL注入风险。下面是一个...
在Java Web开发中,`Filter`过滤器是一个关键的安全组件,用于拦截...总的来说,`URLfilter`展示了如何使用Java过滤器来防止SQL注入攻击的一个基本思路,但在实际应用中,需要结合更全面的安全策略来提高系统的安全性。
Servlet Filter是Java Servlet ...通过重写Filter,我们可以定制化处理流程,有效地解决乱码问题,以及增强应用的安全性,防止诸如SQL注入和XSS等常见攻击。理解并熟练运用Filter,对于提升Java Web开发技能至关重要。
-- 防止SQL注入的过滤器 --> 72 <filter> 73 <filter-name>antiSqlInjection</filter-name> 74 <filter-class>com.tarena.dingdang.filter.AntiSqlInjectionfilter</filter-class> 75 </filter> 76 ...
这一过滤器通常会实现javax.servlet.Filter接口,并在doFilter()方法中进行过滤逻辑的实现。过滤器会获取到原始的HttpServletRequest对象,然后用XssHttpServletRequestWrapper进行包装,以确保请求数据被正确过滤。...
开发者可能使用PreparedStatement对象来防止SQL注入攻击,并通过ResultSet处理查询结果。事务管理也是JDBC的重要部分,确保数据操作的原子性、一致性、隔离性和持久性。 【Servlet】Servlet是Java Servlet API提供...
3. **安全过滤**:过滤敏感字符,防止SQL注入、跨站脚本攻击等。 4. **性能优化**:例如,开启GZIP压缩,减少网络传输的数据量。 5. **权限控制**:检查用户权限,决定是否允许访问特定资源。 ### 5. 扩展性与灵活...
实现登录功能时,应考虑安全性问题,如使用HTTPS协议加密传输数据,防止SQL注入,使用盐值哈希存储密码,以及限制非法登录尝试次数等。 7. **最佳实践** - 使用MVC模式(Model-View-Controller)分离业务逻辑、...