`
wanggp
  • 浏览: 147525 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA中防止SQL注入(使用PreparedStatement 方案)

阅读更多

     SQL注入攻击是利用是指利用设计上的漏洞在目标服务器上运行Sql语句以及 进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
    对于JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement 是无效的这是因为PreparedStatement不允许在不同的插入时改变查询的逻辑结构。 
    如验证用户是否存在的SQL语句为 : 
    select count(*) from usertable where name='用 户 名 ' and pswd='密 码 '
    如果在用户名字段中输 入 ' or '1'='1' or '1'='1或是在密码字段中输入 1' or '1'='1将绕过验证,但这种手段只对只对 Statement有效,对PreparedStatement无效。 
    PreparedStatement 相 对 Statement有以下 优 点: 
    1.防注入攻 击 
    2.多次运行速度快 
    3.防止数据库缓冲区溢出 
    4.代码的可读性可维护性好 
    这四点使得 PreparedStatement 成为访问数据库的语句对象的首选,缺点是灵活性不够好,有些场合还是必须使用Statement。 

分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入.zip

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入.zip

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入 - 副本.zip

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入 - 副本.zip

    如何防止SQL注入.pdf

    通过使用预编译语句(例如,在Java中使用PreparedStatement),可以确保用户输入被当作参数处理,而不是SQL语句的一部分。 2. 检验和清洗用户输入 对用户输入进行验证,确保它符合预期的格式。例如,如果你期待一个...

    Java-JDBC【源码】JDBC概述、获取连接、SQL注入问题与解决、查询解析

    Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...

    JDBC(powernode CD2206)详尽版 (教学视频、源代码、SQL文件)

    JDBC(powernode CD2206)...7.6 使用PreparedStatement改进代码,解决SQL注入问题 八、编写JDBC工具类 九、CRUD操作 十、事务操作 十一、批处理 11.1 jdbc.properties 11.2 BatchDemo.java 11.3 没有进行批处理的耗时

    利用JDBC工具类的方式实现mysql数据库的连接并且完成登录相关功能(防sql注入方式)

    利用JDBC工具类的方式实现mysql数据库的连接并且完成登录相关功能,并且通过PreparedStatement类实现防sql注入

    数据库增删改查的源代码

    //这里使用PreparedStatement,因为效率高、安全性高(可以防sql注入)。 public static PreparedStatement prepare(Connection conn, String sql) { PreparedStatement ps = null; try { //参照JDK API中的...

    Java使用Jsoup抓取网页关键信息并入库

    使用jsoup抓取网页列表信息,并入库,使用了PreparedStatement防止sql注入小demo。

    mybatis笔记.zip

    使用${}和#{}来插入参数,其中${}会直接替换,#{}会被预编译防止SQL注入。 5. 参数映射: 参数映射使用#{}或${}来引用参数,#{}使用PreparedStatement,$${}直接替换。 6. 结果映射: 结果映射将查询结果映射到

    MySQL数据库

    1. 可以避免SQL注入 因为在编译的时候已经把SQL的逻辑固定,不会因为替换进去的内容改变逻辑 2. 如果SQL中涉及变量 相比Statement的字符串拼接的方式,代码可读性提高,并且不容易出错。 3. 如果涉及批量执行多条SQL...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    2.8.3 在JSP页面中使用Include指令后,JSP不能编译 2.9 精彩回顾 第3章前人栽树后人乘凉 ——、JSP内置对象 3.1 本章学习任务 3.1.1 本章知识体系 3.1.2 实例开发任务 3.2 简化开发JSP内置对象概述 3.2.1 为什么...

    Java面试宝典-经典

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    Java面试宝典2010版

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    vertx-sql-client-gradle:sql客户端复制器

    在此示例中,您将看到如何使用参数编写查询,这样做的好处是避免了常见SQL注入安全性问题,因为所有参数在发送给数据库引擎之前都已在PreparedStatement中使用。 流媒体 这是“ Simple示例的后续操作。 在此示例中...

    java面试题大全(2012版)

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    jdbc基础和参考

    提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常 CallableStatement:主要用来执行...

    最新Java面试宝典pdf版

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    一篇搞定JDBC【Mysql基础】

    解决SQL注入的问题用户登录改进后6.对比Statement和PreparedStatement7.演示只能使用Statement对象不能使用PreparedStatement的业务需求用户输入sql语句8.JDBC事务控制三段重要代码应用于数据库用户之间的转账9.悲观...

    Java面试笔试资料大全

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

Global site tag (gtag.js) - Google Analytics