zoukankan      html  css  js  c++  java
  • 好久没考虑过的 sql 注入

    很多年没考虑 sql 注入了,毕业以后 使用mybatis #{ 参数的 语法 },这个 语法已经 做了防止 sql 注入的处理 。 看到同事写的 ${ 参数 },突然 想到这个问题 。  

    下面聊聊 sql注入。

    总结

       ${ 参数 } 里面带有的 任何参数 都会被直接拼接到sql 里面 。

       #{ 参数 } 是 做了预编译。 后面 只能传参数。

    注入的3 种方式:

    原始 sql :     select * from id  = '${ id }'

      1 or 方式      select * from id  = ' 1 or 1=1 ' ,这样可以查询出所有 (红色 为注入部分)

        后果:可以查询到所有数据

      如果 原始 sql :select * from id  = '${ id }' and  name =1

      2 -- 注释方式:select * from id  = ' 1 or 1=1 -- ' and  name =1 (红色 为注入部分)

        后果:后面 的    name =1  的 条件被注释掉了

      3 ; 分割 sql    select * from id  = ' 1 ; update order set amount = 0.01 where id =1  ' (红色 为注入部分)

        后果:啥都没查询到,但是 我吧订单金额 了 

    所以  使用 mybatis 尽量不要使用 ${ 参数 } 语法,不用 mybatis  应该尽量 使用 预编译的sql 。

  • 相关阅读:
    win7 重装 docker 启动后无法启动错误解决
    ASP.NET MVC 播放远程服务器上的MP3文件
    ubuntu+mono+PetaPoco+Oracle+.net 程序部署
    .NET Core 2.0 问题杂记
    博客园挂了吗?
    Content-Type: application/vnd.ms-excel">
    Storm
    Razor语法
    类型后面加问号 int?
    Apache vue site configuration
  • 原文地址:https://www.cnblogs.com/cxygg/p/10607150.html
Copyright © 2011-2022 走看看