java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 ,大部分的SQL注入已经挡住了, 在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数
01 import java.io.IOException;
02 import java.util.Iterator;
03 import javax.servlet.Filter;
04 import javax.servlet.FilterChain;
05 import javax.servlet.FilterConfig;
06 import javax.servlet.ServletException;
07 import javax.servlet.ServletRequest;
08 import javax.servlet.ServletResponse;
09 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 /**
12 * 通过Filter过滤器来防SQL注入攻击
13 *
14 */
15 public class SQLFilter implements Filter {
16 private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|; |or|-|+|,";
17 protected FilterConfig filterConfig = null;
18 /**
19 * Should a character encoding specified by the client be ignored?
20 */
21 protected boolean ignore = true;
22 public void init(FilterConfig config) throws ServletException {
23 this.filterConfig = config;
24 this.inj_str = filterConfig.getInitParameter("keywords");
25 }
26 public void doFilter(ServletRequest request, ServletResponse response,
27 FilterChain chain) throws IOException, ServletException {
28 HttpServletRequest req = (HttpServletRequest)request;
29 HttpServletResponse res = (HttpServletResponse)response;
30 Iterator values = req.getParameterMap().values().iterator();//获取所有的表单参数
31 while(values.hasNext()){
32 String[] value = (String[])values.next();
33 for(int i = 0;i < value.length;i++){
34 if(sql_inj(value[i])){
35 //TODO这里发现sql注入代码的业务逻辑代码
36 return;
37 }
38 }
39 }
40 chain.doFilter(request, response);
41 }
42 public boolean sql_inj(String str)
43 {
44 String[] inj_stra=inj_str.split("\\|");
45 for (int i=0 ; i < inj_stra.length ; i++ )
46 {
47 if (str.indexOf(" "+inj_stra[i]+" ")>=0)
48 {
49 return true;
50 }
51 }
52 return false;
53 }
54 }
也可以单独在需要防范SQL注入的JavaBean的字段上过滤:
1 /**
2 * 防止sql注入
3 *
4 * @param sql
5 * @return
6 */
7 public static String TransactSQLInjection(String sql) {
8 return sql.replaceAll(".*([';]+|(--)+).*", " ");
9 }
分享到:
相关推荐
编写SQL注入扫描工具,我们需要关注以下几个关键点: 1. **目标识别**:确定要扫描的目标网站或Web应用,收集其URL结构和可能的输入点。 2. **数据构造**:创建一系列测试用例,包括常见的注入字符串,如`' OR 1=1...
7. **安全性**:考虑使用`PreparedStatement`而不是`Statement`,因为前者可以防止SQL注入攻击,并且通常更高效。 8. **事务管理**:JDBC支持事务,你可以通过`Connection`对象的`setAutoCommit()`和`commit()`方法...
系统的架构可能包括以下几个主要部分: 1. 用户界面:由JSP页面组成,用户可以通过这个界面进行登录、查看选题、提交选题申请等操作。 2. 控制层:这部分主要由Servlet或者JSP的Action类组成,负责接收用户的请求,...
同时,理解和遵循最佳实践,比如使用预编译语句防止SQL注入,以及正确管理数据库连接以优化资源使用,都是提升Java应用数据库交互效率的关键。 总之,SQL Server 2000的JDBC驱动为Java开发者提供了一种直接、高效的...
10. **安全性**:系统应考虑安全性,包括防止SQL注入、XSS攻击、CSRF攻击等,这需要开发者遵循最佳安全实践。 通过学习和实践这个"JAVA在线答疑系统"项目,你可以深化对Java Web开发的理解,掌握MVC架构、数据库...
3. 创建Statement或PreparedStatement对象:根据需求,你可以创建Statement用于执行静态SQL,或者创建PreparedStatement用于执行预编译的SQL,以提高性能并防止SQL注入。 4. 执行SQL:调用Statement或...
7. 安全性考虑:系统应包含防止SQL注入、XSS攻击等安全措施,确保用户数据的安全。 8. 性能优化:通过缓存技术、负载均衡等手段,提升系统的响应速度和并发处理能力。 在开发过程中,开发团队可能会使用MVC(Model...
12. **安全问题**:防止SQL注入是开发中的重要任务,面试可能会问到你的实践经验和相关知识。 13. **操作系统**:在Linux环境下,了解如何查看CPU使用率,这是基本的操作技能。 14. **多态**:Java中的多态性是...
- **PreparedStatement**:预编译的SQL语句,可以防止SQL注入攻击,提高性能。例如,使用`PreparedStatement`时,你可以使用占位符(问号`?`),然后通过设置参数来替换它们。 ```java String sql = "INSERT INTO ...
6. **安全性**:检查项目中是否包含了防止SQL注入、XSS攻击等安全措施,理解如何保护用户数据的安全。 7. **单元测试与集成测试**:查看是否存在JUnit或其他测试框架的代码,理解如何验证和保证代码质量。 通过...
2. **SQL注入防护**:Jeecms采用预编译SQL语句(PreparedStatement)来防止SQL注入攻击,同时对用户输入进行严格的过滤和校验,降低数据库被恶意篡改的风险。 3. **XSS防护**:通过输出内容的编码和过滤,Jeecms...
"Insurance"可能是一个包含整个项目源代码的文件或目录,其中可能有以下几个关键部分: 1. **源码结构**:通常会有一个src/main/java目录,存放所有的Java源代码,按照包结构组织,如com.insurance.action(Struts2...
开发者通过编写SQL语句来定义和操作包含约束的表,并使用PreparedStatement对象来安全地执行这些语句,防止SQL注入攻击。此外,ORM框架如Hibernate和MyBatis可以帮助简化数据库操作,自动处理约束验证和事务管理。 ...
JDBC 体系结构主要包含以下几个部分:DriverManager、Driver、Connection、Statement、ResultSet。其中,DriverManager 负责管理 JDBC驱动程序;Driver 负责连接数据库;Connection 负责维护数据库连接;Statement ...
在Java Web论坛中,核心的技术栈可能包括以下几个方面: 1. **Servlet与JSP**:Servlet是Java EE平台中的基础组件,用于处理HTTP请求和响应。JSP(Java Server Pages)则是一种动态网页技术,可以将HTML代码与Java...
系统设计上,可能包括以下几个主要模块:用户管理模块,用于处理用户注册、登录、个人信息管理等功能;图书展示模块,用于展示各类图书,提供搜索和分类浏览;购物车模块,实现商品添加、删除以及结算功能;订单处理...
在Java Web开发中,以下几个关键知识点是不可或缺的: 1. **Servlet**:Servlet是Java Web应用的核心组件,用于接收和响应HTTP请求。了解Servlet生命周期、如何编写Servlet以及Servlet配置是基础。 2. **JSP(Java...
13. **安全机制**:包括认证(如JWT)、授权(如OAuth2.0)、防止SQL注入和XSS攻击等,确保系统安全。 14. **日志记录**:如Log4j、SLF4J等,用于收集运行时信息,便于问题排查和性能监控。 15. **性能优化**:...