转载:http://www.51testing.com/html/03/n-805503.html
Java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数。
import java.io.IOException;
import java.util.Iterator;
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 javax.servlet.http.HttpServletResponse;
public class SQLFilter implements Filter {
private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|; |or|-|+|,";
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
this.inj_str = filterConfig.getInitParameter("keywords");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
Iterator values = req.getParameterMap().values().iterator();
while(values.hasNext()){
String[] value = (String[])values.next();
for(int i = 0;i < value.length;i++){
if(sql_inj(value[i])){
return;
}
}
}
chain.doFilter(request, response);
}
public boolean sql_inj(String str)
{
String[] inj_stra=inj_str.split("\\|");
for (int i=0 ; i < inj_stra.length ; i++ )
{
if (str.indexOf(" "+inj_stra[i]+" ")>=0)
{
return true;
}
}
return false;
}
}
|
也可以单独在需要防范SQL注入的JavaBean的字段上过滤:
public static String TransactSQLInjection(String sql) {
return sql.replaceAll(".*([';]+|(--)+).*", " ");
}
|
分享到:
相关推荐
编写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. **性能优化**:...