知识大全 Java开发中容易产生Sql注入的原因以及避免方式

Posted 语句

篇首语:不飞则已,一飞冲天;不鸣则已,一鸣惊人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java开发中容易产生Sql注入的原因以及避免方式相关的知识,希望对你有一定的参考价值。

Java开发中容易产生Sql注入的原因以及避免方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    注入 攻 击 是利用是指利用 设计 上的漏洞 在目 标 服 务 器上运行 Sql语 句以及 进 行其他方式的 攻 击     动态 生成 Sql语 句 时 没有 对 用 户输 入的数据 进 行 验证 是 Sql注入 攻 击 得逞的主要原因     对 于 JDBC而言 SQL注入 攻 击 只 对 Statement有效 对 PreparedStatement 是无效的 这 是因 为 PreparedStatement 不允 许在不同的插入 时间 改 变查询 的 逻辑结 构     如 验证 用 户 是否存在的 SQL语 句 为     用 户 名 and pswd= 密 码    如果在 用 户 名字段 中 输 入    或是在 密 码 字段 中 输 入    将 绕过验证 但 这种 手段只 对 只 对 Statement有效 对 PreparedStatement 无效     相 对 Statement有以下 优 点     防注入 攻 击    多次运行速度快    防止 数据 库缓 冲区溢出    代 码 的可 读 性可 维护 性好    这 四点使得 PreparedStatement 成 为访问 数据 库 的 语 句 对 象的首 选 缺点是灵活性不 够 好 有些 场 合 还 是必 须 使用Statement     网上抄的     是预编译的 对于批量处理可以大大提高效率 也叫JDBC存储过程    使用 Statement 对象 在对数据库只执行一次性存取的时侯 用 Statement 对象进行处理 PreparedStatement 对象的开销比Statement大 对于一次性操作并不会带来额外的好处     每次执行sql语句 相关数据库都要执行sql语句的编译 preparedstatement是预编译得 preparedstatement支持批处理    ′Colombian′    片断 和片断 的区别在于 后者使用了PreparedStatement对象 而前者是普通的Statement对象 PreparedStatement对象不仅包含了SQL语句 而且大多数情况下这个语句已经被预编译过 因而当其执行时 只需DBMS运行SQL语句 而不必先编译 当你需要执行Statement对象多次的时候 PreparedStatement对象将会大大降低运行时间 当然也加快了访问数据库的 速度     这种转换也给你带来很大的便利 不必重复SQL语句的句法 而只需更改其中变量的值 便可重新执行SQL语句 选择PreparedStatement对 象与否 在于相同句法的SQL语句是否执行了多次 而且两次之间的差别仅仅是变量的不同 如果仅仅执行了一次的话 它应该和普通的对象毫无差异 体现不出 它预编译的优越性     执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象 通常认为 PreparedStatement对象比Statement对象更有效 特别是如果带有不同参数的同一SQL语句被多次执行的时候 PreparedStatement对象允许数据库预编译SQL语句 这样在随后的运行中可以节省时间并增加代码的可读性     然而 在Oracle环境中 开发人员实际上有更大的灵活性 当使用Statement或PreparedStatement对象时 Oracle数据库 会缓存SQL语句以便以后使用 在一些情况下 由于驱动器自身需要额外的处理和在Java应用程序和Oracle服务器间增加的网络活动 执行 PreparedStatement对象实际上会花更长的时间     然而 除了缓冲的问题之外 至少还有一个更好的原因使我们在企业应用程序中更喜欢使用PreparedStatement对象 那就是安全性 传递给 PreparedStatement对象的参数可以被强制进行类型转换 使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配     当处理公共Web站点上的用户传来的数据的时候 安全性的问题就变得极为重要 传递给PreparedStatement的字符串参数会自动被驱动器忽 略 最简单的情况下 这就意味着当你的程序试着将字符串 D Angelo 插入到VARCHAR 中时 该语句将不会识别第一个 从而导致悲惨的 失败 几乎很少有必要创建你自己的字符串忽略代码     在Web环境中 有恶意的用户会利用那些设计不完善的 不能正确处理字符串的应用程序 特别是在公共Web站点上 在没有首先通过 PreparedStatement对象处理的情况下 所有的用户输入都不应该传递给SQL语句 此外 在用户有机会修改SQL语句的地方 如HTML的 隐藏区域或一个查询字符串上 SQL语句都不应该被显示出来     在执行SQL命令时 我们有二种选择 可以使用PreparedStatement对象 也可以使用Statement对象 无论多少次地使用同一个 SQL命令 PreparedStatement都只对它解析和编译一次 当使用Statement对象时 每次执行一个SQL命令时 都会对它进行解析 和编译     第一     会先初始化SQL 先把这个SQL提交到数据库中进行预处理 多次使用可提高效率     不会初始化 没有预处理 没次都是从 开始执行    第二     可以替换变量    在SQL语句中可以包含? 可以用    可以把?替换成变量     而Statement只能用    来实现     第三     会先初始化SQL 先把这个SQL提交到数据库中进行预处理 多次使用可提高效率     不会初始化 没有预处理 没次都是从 开始执行 cha138/Article/program/Java/hx/201311/25937

相关参考

知识大全 SQL注入步骤和常用函数以及中文处理方法

SQL注入步骤和常用函数以及中文处理方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第一节S

知识大全 关于SQL注入的几类错误和产生

关于SQL注入的几类错误和产生  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138

知识大全 SQL注入漏洞[2]

PHP网络开发详解:SQL注入漏洞[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SQL注入漏洞[1]

PHP网络开发详解:SQL注入漏洞[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 nginx防止sql注入

  防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义  对于简单的情况比如包含单引号分号;<>等字符可通过rewrite直接重订向到页面来避免  用rewrite有个前提需要

知识大全 用PL/SQL和Java开发Oracle8 i应用程序

用PL/SQL和Java开发Oracle8i应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 MySQL中SQL的单字节注入与宽字节注入

MySQL中SQL的单字节注入与宽字节注入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一单字

知识大全 SQL Server应用程序中的高级SQL注入

SQLServer应用程序中的高级SQL注入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要

知识大全 在PHP中全面阻止SQL注入式攻击

在PHP中全面阻止SQL注入式攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在本系列文章中

知识大全 ASP.NET中如何防范SQL注入式攻击

ASP.NET中如何防范SQL注入式攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是