SQL注入

SQL注入是注入式攻击中的常见类型,SQL注入式攻击是未将代码与数据进行严格的隔离开,最后导致在读取用户数据的时候,错误的把数据作为代码的一部分进行执行,从而导致一些安全问题。

SQL注入自诞生以来以其巨大的杀伤力而闻名于世。典型的SQL输入的例子就是当对SQL进行字符串拼接操作的时候,直接使用未加转义的用户输入内容作为变量,比如下面的这种情况:

var condition;
condition=Request.form("condition");
var sql="select * from User where id='"+condition+"'";
这样如果用户输入id是没问题,但是如果condition是“;”+delete/update语句的话,会有你意想不到的的结果。

曾经在某个业务中,用户在修改签名时,非常容易输入“#--!#@”这样的内容用来表达心情,然后点击保存后出发数据库更新。由于该业务未危险字符串“#--”进行转义,导致where后边的信息被注释掉,执行语句变成下面这种情况:

update user set common="\"# -- ! #" where user_id=10001

该SQL语句的执行会导致全库的common字段被更新,所以,SQL注入的危害是无法想象的,注入的原理也很简单,

如何防范SQL注入呢?

过滤用户输入参数中的特殊字符,从而降低SQL注入的风险

禁止通过字符串拼接SQL的语句,严格使用参数绑定传入的SQL参数

合理使用数据库访问框架的防注入机制

Mybatis提供的#{}绑定参数,从而防止SQL注入。另外,注意谨慎使用${},当${}相当于使用字符串拼接SQL拒绝拼接的SQL语句,使用参数化的语句。

总之,一定要简历对注入式攻击的风险意识,正确使用参数化绑定SQL变量,这样才能有效地避免SQL注入。实际上,其他诸如也是类似的方法。

再次提醒:作为一个开发人员,我们一定要时刻保持对注入攻击的高度警惕。

本文分享自微信公众号 - Java后端技术栈(t-j20120622),作者:lawt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图解MyBatis

    在以前文章中,我们对Mybatis进行了入门级的介绍教小师妹快速入门Mybatis,看这篇就够了,今天我们来从一个全局的角度看看Mybatis。

    田维常
  • 快速搞定MyBatis面试题

    Mybatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ? 号,调用 PreparedStatement 的 set 方法来赋值。

    田维常
  • Mybatis源码阅读套路,一次性打包发您~

    前提是我们需要对整个Mybatis的原理、工作流程和模块进行一个整体的直知晓,另外还要有使用经验。

    田维常
  • 复杂一点的SQL语句

    create user liuyifei identified by 4852396;

    职场亮哥
  • 一个执行计划异常变更的案例 - 外传之SQL Profile(上)

    之前的几篇文章: 《一个执行计划异常变更的案例 - 前传》 《一个执行计划异常变更的案例 - 外传之绑定变量窥探》 《一个执行计划异常变更的案例 -...

    bisal
  • WEB攻击手段及防御第2篇-SQL注入

    概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的...

    Java技术栈
  • SQL 审核 - z3 产品理念与功能介绍

    我们都知道,在 DBA 所优化的数据库环境中,绝大多数性能问题其实是由于 SQL 编写不当导致的,一个开发环境中,众多的程序员难免引入一个又一个的或初级或高端的...

    数据和云
  • 工作 -- Velocity渲染SQL如何避免注入?

    业务开发中,会出现一些数据服务系统,既然是数据服务,那么快速提供一个业务查询配置,是必须的能力。在这个方案中,我采取了Velocity渲染SQL Templat...

    屈定
  • 干货 | 应用SQL性能风险识别与预警,携程金融支付AppTrace落地实践

    在我们过往的测试及生产问题的分析中,常常可以发现应用执行数据库操作导致出现性能问题的情况。而这些情况中最常见的原因是SQL执行时,索引未能恰当的使用,例如未建索...

    携程技术
  • 杨廷琨Oracle Code大会分享:如何编写高效SQL(含PPT)

    2018 Oracle Code 于5月17日在新加坡拉开帷幕。作为全球开发者交流分享的年度盛会,为吸引所有领域的开发者,Oracle今年将自1996年开始的J...

    数据和云

扫码关注云+社区

领取腾讯云代金券