package com.spider.reader.common.filter; import java.io.IOException; import java.util.Enumeration; 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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.spider.reader.common.util.StringUtils; public class CharsetFilter implements Filter { protected final static Log log = LogFactory.getLog(CharsetFilter.class); private String encoding = null; private String errorforward = null; private static String postsql = null; private static String getsql = null; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (StringUtils.isEmpty(request.getCharacterEncoding())) { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } boolean bool = UrlFilter((HttpServletRequest) request); if (bool == false) { request.getRequestDispatcher(errorforward).forward(request, response); } } public void init(FilterConfig filterconfig) throws ServletException { encoding = filterconfig.getInitParameter("encoding"); errorforward = filterconfig.getInitParameter("errorforward"); postsql = filterconfig.getInitParameter("postsql"); getsql = filterconfig.getInitParameter("getsql"); } /** * URL过滤 * * @author songnan * @param request * @return true为合法 false为非法 */ public static boolean UrlFilter(HttpServletRequest request) { String method = request.getMethod().toString().toLowerCase(); StringBuffer sbUrl = request.getRequestURL(); String[] filterurl = postsql.split("\\|"); if("post".equalsIgnoreCase(StringUtils.nvl(method))){ filterurl = getsql.split("\\|"); } Enumeration emParams = request.getParameterNames(); StringBuffer sb = new StringBuffer(""); boolean bool = true; while(emParams.hasMoreElements()){ String sParam = (String) emParams.nextElement(); String[] sValues = request.getParameterValues(sParam); sParam = sParam.replaceAll(" ", ""); String sValue = ""; if(!sParam.startsWith("paragraph")){ for (int i = 0; i < sValues.length; i++) { sValue = sValues[i]; sValue = sValue.replaceAll(" ", ""); if (sValue != null && sValue.trim().length() != 0 && bool == true) { bool = false; sb.append(sParam).append("=").append(sValue); } else if (sValue != null && sValue.trim().length() != 0 && bool == false) { sb.append("&").append(sParam).append("=").append(sValue); } } } } if (sb.toString() != null) { String loqueryStr = sb.toString().toLowerCase(); for (int i = 0; i < filterurl.length; i++) { if (loqueryStr.contains(filterurl[i])) { log.error("错误链接地址:" + sbUrl.toString()); log.error(loqueryStr + " = " + filterurl[i]); return false; } } } return true; } }
web.xml
<filter>
<filter-name>encoding</filter-name>
<filter-class>
com.spider.reader.common.filter.CharsetFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>errorforward</param-name>
<param-value>/index.jsp</param-value>
</init-param>
<init-param>
<param-name>getsql</param-name>
<param-value>
exec|execute|insert|delete|update|master|truncate|char|declare|like|drop|database
</param-value>
</init-param>
<init-param>
<param-name>postsql</param-name>
<param-value>
exec|execute|delete|update|truncate|drop
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
相关推荐
下面我们将深入探讨SQL注入的基本原理、为何需要防止以及如何在Java中实现过滤器(Filter)来防止此类攻击。 1. SQL注入基础: SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被...
此外,还可以使用白名单或黑名单过滤器来去除或转换可能的危险字符。 对于登录和其他关键操作,使用HTTPS协议进行加密通信,可以保护数据在传输过程中不被窃取。同时,定期更新和打补丁,保持服务器软件和数据库...
- **SQL注入**:一种常见的网络安全攻击方式,用户应避免在动态SQL中直接拼接用户输入,而应使用参数化查询。 - **索引优化**:合理创建和使用索引可以显著提升查询速度,但过多的索引会影响写操作性能。 - **...
4. **Response.Filter**:可以自定义输出过滤器,检查并处理响应内容,去除或编码可能的恶意脚本。 **ASP.NET的替换和过滤** 在ASP.NET中,字符串替换和过滤是常见的操作,可以使用String类的方法如Replace(),...
SQL注入是一种常见的网络安全攻击方式,通过在设计不佳的Web应用程序中输入恶意SQL语句,攻击者可以操纵数据库执行非授权操作,如读取、修改或删除数据。 ### SQL注入命令详解 #### 1. 创建临时表存储目录信息 ``...
- `EDIT`:启动默认编辑器编辑SQL脚本。 - `EDIT filename`:编辑指定文件。 - **屏幕输出控制**: - `SPOOL filename`:将输出重定向到文件。 - `SPOOL OFF`:关闭重定向。 - **退出SQL*Plus**:`EXIT` #### ...
在网络安全领域中,SQL注入是一种常见的攻击方式,通过将恶意SQL代码插入到应用程序的数据输入字段中,攻击者可以获取敏感数据、篡改数据库或控制整个后端服务器。安全狗(SafeDog)是一款常用的安全防护软件,用于...
10.1.1 SQL注入漏洞原理 10.1.2 过滤敏感字符 10.1.3 使用参数化SQL 10.2 SQL调优 10.2.1 SQL调优的基本原则 10.2.2 索引 10.2.3 全表扫描和索引查找 10.2.4 优化手法 10.3 事务 10.3.1 事务...
8. **使用参数化查询:** 参数化查询不仅可以提高安全性,防止SQL注入攻击,还可以提高执行计划的复用率,从而提高查询性能。 9. **定期分析和优化查询计划:** 使用数据库的查询分析工具,如SQL Server的查询计划...
SQL注入是一种常见的安全漏洞,攻击者通过在输入字段中插入恶意SQL语句,欺骗服务器执行非预期的操作。例如,攻击者可能试图获取数据库中的敏感信息或修改数据库内容。为了防御SQL注入,开发人员应确保对用户输入...
SpringBoot默认使用PreparedStatement来防止SQL注入,但开发者仍需保持警惕,避免直接拼接SQL语句。此外,可以考虑使用ORM框架如MyBatis或JPA,它们提供了更高级别的SQL安全防护。 总结,通过SpringBoot整合Xss...
**10.1 SQL注入漏洞攻防** - **SQL注入漏洞原理** - 利用SQL语句中的漏洞进行攻击。 - **过滤敏感字符** - 对输入进行转义或过滤。 - **使用参数化SQL** - 避免直接拼接SQL语句。 **10.2 SQL调优** - **SQL...
综上所述,PHP提供了丰富的内置工具来过滤和验证请求数据,但开发人员应始终牢记,仅仅依赖这些工具还不够,还需要结合良好的编码习惯和全面的安全策略,例如使用预处理语句防止SQL注入,使用htmlspecialchars防止...
然后,我们可以对这些参数的值进行过滤,例如去除非法字符、禁止输入SQL注入语句等。 3. **HttpServletRequest中的字符过滤**: - 使用`getParameter()`或`getParameterValues()`获取参数后,可以对每个参数值执行...
- **参数化查询**:避免SQL注入风险。 #### 七、模块3:分组与汇总数据 - **TOP n值**:列出前n个值。 - 示例:SELECT TOP 10 * FROM table_name ORDER BY column_name DESC; - **聚合函数**:用于计算一组值的...
它是一个基于Servlet过滤器的框架,通过DispatcherServlet作为前端控制器来接收和处理HTTP请求。配置通常在`web.xml`中完成,DispatcherServlet负责分发请求给相应的处理器。 2. **Spring框架的注解**:Spring框架...
- **参数化查询**: 在实际应用中,建议使用参数化的查询方式来防止SQL注入攻击。例如,可以使用占位符和实际值的方式,如:`"SELECT * FROM news WHERE bigclassname = ?"`,然后使用`Command.Parameters....