`
shuai1234
  • 浏览: 978083 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

java防止SQL注入的几个途径

    博客分类:
  • java
 
阅读更多
  1. java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 ,大部分的SQL注入已经挡住了, 在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数  
  2. 01  import java.io.IOException;  
  3. 02  import java.util.Iterator;  
  4. 03  import javax.servlet.Filter;  
  5. 04  import javax.servlet.FilterChain;  
  6. 05  import javax.servlet.FilterConfig;  
  7. 06  import javax.servlet.ServletException;  
  8. 07  import javax.servlet.ServletRequest;  
  9. 08  import javax.servlet.ServletResponse;  
  10. 09  import javax.servlet.http.HttpServletRequest;  
  11. 10  import javax.servlet.http.HttpServletResponse;  
  12. 11  /** 
  13. 12  * 通过Filter过滤器来防SQL注入攻击 
  14. 13  * 
  15. 14  */  
  16. 15  public class SQLFilter implements Filter {  
  17. 16 private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%
  18. |chr|mid|master|truncate|char|declare|;|or|-|+|,";  
  19. 17  protected FilterConfig filterConfig = null;  
  20. 18  /** 
  21. 19  * Should a character encoding specified by the client be ignored? 
  22. 20  */  
  23. 21  protected boolean ignore = true;  
  24. 22  public void init(FilterConfig config) throws ServletException {  
  25. 23  this.filterConfig = config;  
  26. 24  this.inj_str = filterConfig.getInitParameter("keywords");  
  27. 25  }  
  28. 26  public void doFilter(ServletRequest request, ServletResponse response,  
  29. 27  FilterChain chain) throws IOException, ServletException {  
  30. 28  HttpServletRequest req = (HttpServletRequest)request;  
  31. 29  HttpServletResponse res = (HttpServletResponse)response;  
  32. 30  Iterator values = req.getParameterMap().values().iterator();//获取所有的表单参数  
  33. 31  while(values.hasNext()){  
  34. 32  String[] value = (String[])values.next();  
  35. 33  for(int i = 0;i < value.length;i++){  
  36. 34  if(sql_inj(value[i])){  
  37. 35  //TODO这里发现sql注入代码的业务逻辑代码  
  38. 36  return;  
  39. 37  }  
  40. 38  }  
  41. 39  }  
  42. 40  chain.doFilter(request, response);  
  43. 41  }  
  44. 42  public boolean sql_inj(String str)  
  45. 43  {  
  46. 44  String[] inj_stra=inj_str.split("\\|");  
  47. 45  for (int i=0 ; i < inj_stra.length ; i++ )  
  48. 46  {  
  49. 47  if (str.indexOf(" "+inj_stra[i]+" ")>=0)  
  50. 48  {  
  51. 49  return true;  
  52. 50  }  
  53. 51  }  
  54. 52  return false;  
  55. 53  }  
  56. 54  }  
  57.   
  58. 也可以单独在需要防范SQL注入的JavaBean的字段上过滤:  
  59. 1   /** 
  60. 2   * 防止sql注入 
  61. 3   * 
  62. 4   * @param sql 
  63. 5   * @return 
  64. 6   */  
  65. 7   public static String TransactSQLInjection(String sql) {  
  66. 8   return sql.replaceAll(".*([';]+|(--)+).*"" ");  
  67. 9   } 
分享到:
评论

相关推荐

    Java防止SQL注入的几个途径

    Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常重要的安全问题。SQL 注入攻击是黑客最常用的攻击方式之一,它可以让攻击者访问或修改数据库中的敏感信息。因此,防止 SQL 注入是 Java 开发者必须注意...

    自己动手编写SQL注入漏洞扫描工具

    编写SQL注入扫描工具,我们需要关注以下几个关键点: 1. **目标识别**:确定要扫描的目标网站或Web应用,收集其URL结构和可能的输入点。 2. **数据构造**:创建一系列测试用例,包括常见的注入字符串,如`' OR 1=1...

    sqljdbc4-4.0.zip

    7. **安全性**:考虑使用`PreparedStatement`而不是`Statement`,因为前者可以防止SQL注入攻击,并且通常更高效。 8. **事务管理**:JDBC支持事务,你可以通过`Connection`对象的`setAutoCommit()`和`commit()`方法...

    java毕设课设-Jsp+sql毕业选题系统(论文).zip

    系统的架构可能包括以下几个主要部分: 1. 用户界面:由JSP页面组成,用户可以通过这个界面进行登录、查看选题、提交选题申请等操作。 2. 控制层:这部分主要由Servlet或者JSP的Action类组成,负责接收用户的请求,...

    SQL Server2000的JDBC驱动

    同时,理解和遵循最佳实践,比如使用预编译语句防止SQL注入,以及正确管理数据库连接以优化资源使用,都是提升Java应用数据库交互效率的关键。 总之,SQL Server 2000的JDBC驱动为Java开发者提供了一种直接、高效的...

    JAVA在线答疑系统

    10. **安全性**:系统应考虑安全性,包括防止SQL注入、XSS攻击、CSRF攻击等,这需要开发者遵循最佳安全实践。 通过学习和实践这个"JAVA在线答疑系统"项目,你可以深化对Java Web开发的理解,掌握MVC架构、数据库...

    sql server jdbc

    3. 创建Statement或PreparedStatement对象:根据需求,你可以创建Statement用于执行静态SQL,或者创建PreparedStatement用于执行预编译的SQL,以提高性能并防止SQL注入。 4. 执行SQL:调用Statement或...

    JAVA网上购书系统

    7. 安全性考虑:系统应包含防止SQL注入、XSS攻击等安全措施,确保用户数据的安全。 8. 性能优化:通过缓存技术、负载均衡等手段,提升系统的响应速度和并发处理能力。 在开发过程中,开发团队可能会使用MVC(Model...

    2018 Java 工程师面试总结

    12. **安全问题**:防止SQL注入是开发中的重要任务,面试可能会问到你的实践经验和相关知识。 13. **操作系统**:在Linux环境下,了解如何查看CPU使用率,这是基本的操作技能。 14. **多态**:Java中的多态性是...

    Java基础学习34.pdf

    - **PreparedStatement**:预编译的SQL语句,可以防止SQL注入攻击,提高性能。例如,使用`PreparedStatement`时,你可以使用占位符(问号`?`),然后通过设置参数来替换它们。 ```java String sql = "INSERT INTO ...

    java项目之小区门户网站源码.zip

    6. **安全性**:检查项目中是否包含了防止SQL注入、XSS攻击等安全措施,理解如何保护用户数据的安全。 7. **单元测试与集成测试**:查看是否存在JUnit或其他测试框架的代码,理解如何验证和保证代码质量。 通过...

    jeecms-src.zip_jeecms_安全管理 Java

    2. **SQL注入防护**:Jeecms采用预编译SQL语句(PreparedStatement)来防止SQL注入攻击,同时对用户输入进行严格的过滤和校验,降低数据库被恶意篡改的风险。 3. **XSS防护**:通过输出内容的编码和过滤,Jeecms...

    java保险系统项目源码

    "Insurance"可能是一个包含整个项目源代码的文件或目录,其中可能有以下几个关键部分: 1. **源码结构**:通常会有一个src/main/java目录,存放所有的Java源代码,按照包结构组织,如com.insurance.action(Struts2...

    MySQL约束_java_资料.zip

    开发者通过编写SQL语句来定义和操作包含约束的表,并使用PreparedStatement对象来安全地执行这些语句,防止SQL注入攻击。此外,ORM框架如Hibernate和MyBatis可以帮助简化数据库操作,自动处理约束验证和事务管理。 ...

    JDBC内容之宋红康版本

    JDBC 体系结构主要包含以下几个部分:DriverManager、Driver、Connection、Statement、ResultSet。其中,DriverManager 负责管理 JDBC驱动程序;Driver 负责连接数据库;Connection 负责维护数据库连接;Statement ...

    java web 论坛

    在Java Web论坛中,核心的技术栈可能包括以下几个方面: 1. **Servlet与JSP**:Servlet是Java EE平台中的基础组件,用于处理HTTP请求和响应。JSP(Java Server Pages)则是一种动态网页技术,可以将HTML代码与Java...

    java众望书城网上系统

    系统设计上,可能包括以下几个主要模块:用户管理模块,用于处理用户注册、登录、个人信息管理等功能;图书展示模块,用于展示各类图书,提供搜索和分类浏览;购物车模块,实现商品添加、删除以及结算功能;订单处理...

    Java web随手记,持续更新

    在Java Web开发中,以下几个关键知识点是不可或缺的: 1. **Servlet**:Servlet是Java Web应用的核心组件,用于接收和响应HTTP请求。了解Servlet生命周期、如何编写Servlet以及Servlet配置是基础。 2. **JSP(Java...

    java经典项目

    13. **安全机制**:包括认证(如JWT)、授权(如OAuth2.0)、防止SQL注入和XSS攻击等,确保系统安全。 14. **日志记录**:如Log4j、SLF4J等,用于收集运行时信息,便于问题排查和性能监控。 15. **性能优化**:...

Global site tag (gtag.js) - Google Analytics