`
- 浏览:
972326 次
- 性别:
- 来自:
山西
-
- 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
-
-
-
- 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
-
-
- 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
- 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
-
-
-
-
-
- 7 public static String TransactSQLInjection(String sql) {
- 8 return sql.replaceAll(".*([';]+|(--)+).*", " ");
- 9 }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常重要的安全问题。SQL 注入攻击是黑客最常用的攻击方式之一,它可以让攻击者访问或修改数据库中的敏感信息。因此,防止 SQL 注入是 Java 开发者必须注意...
编写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. **性能优化**:...