• sql注入学习笔记


    1.什么是SQL注入

      SQL注入就是指web应用程序对用户输入的数据的合法性没有判断,前端传入后端的参数带有数据库查询的语句,攻击者可以构造不同的SQL语句来实现对数据库的操作。

    2.SQL注入原理

      SQL注入漏洞产生需要满足以下两个条件。

    -->参数用户可控,前端传给后端的参数内容是用户可以控制的

    -->参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

    当传入id参数为1'时,数据库执行的代码如下。

    select * from users where id = 1'

      这不符合数据库的语法规范,所以会报错,当传入id参数为1 and 1=1 时,执行的语句如下。

    select * from users where id = 1 and 1=1

     

      这时候是where语句中,id = 1为真,1 = 1也为真,所以页面会返回与id=1相同的结果,当传入的参数后面为 and 1 = 2时,由于1 = 2不成立,所以返回假,就会返回与id=1不同的结果。

     

      由此就可以判断ID参数存在SQL注入漏洞。

     

      因此开发者需秉持“外部数据皆不可信”的原则进行开发。

     

    3.MYSQL注入相关的知识点

      在mysql5.0版本之后,mysql默认在数据库中存放了一个information_schema的数据库。在该库中需要记住的表名有:SCHEMATATABLESCOLUMNS

      SCHEMATA表存储该用户创建的所有数据库的库名如下图所示。

       我们只需要记住该表中记录数据库名字的字段名为SCHEMA_NAME

      TABLES表存储了该用户创建的所有数据库的库名和表名,如下图所示

       需要记住的字段名分别为TABLES_SCHEMATABLE_NAME

      COLUMNS表存储该用户创建的所有数据库的库名,表名和字段名,如下图所示。

       需要记住的字段名有TABLE_SCHEMATABLE_NAMECOLUMN_NAME

      1.mysql查询语句

      select 查询的字段名 from 库名.表名

      select 要查询的字段名 from 库名.表名 where 已知条件的字段名 = '已知条件的值'

      select 要查询的字段名 from 库名.表名 where 已知条件的字段名 = '已知条件的值' and 已知条件2的字段名 = '已知条件2的值'

      2.limit的用法

      limit使用格式为 limit m,n 其中m时记录开始的位置,从0开始取一条记录就是limit 0,1,这就是取出提一条记录

      3.需要记住的几个函数

      database()    当前网站使用的数据库

      version()    当前mysql的版本

      user()    当前mysql的用户

      4.注释符

      在mysql中常见的注释符的表达方式为 #、--空格、/**/

      5.内联注释

      内联注释的形式:/* !code */。内联注释可以用于整个SQL语句中,来执行我们的SQL语句。

      

  • 相关阅读:
    Tomcat 性能监控与调优
    04 使用 BTrace 进行拦截调试
    03 JVisualVM(本地和远程可视化监控)
    02 jmap+MAT(内存溢出)、jstack(线程、死循环、死锁)
    01 JVM的参数类型、jinfo & jps(参数和进程查看)、jstat(类加载、垃圾收集、JIT 编译)
    69_缓存预热解决方案:基于storm实时热点统计的分布式并行缓存预热
    66_讲给Java工程师的史上最通俗易懂Storm教程:纯手工集群部署
    57_分布式缓存重建并发冲突问题以及zookeeper分布式锁解决方案
    54_基于nginx+lua+java完成多级缓存架构的核心业务逻辑
    53_部署分发层nginx以及基于lua完成基于商品id的定向流量分发策略
  • 原文地址:https://www.cnblogs.com/qxxaq/p/11442891.html
Copyright © 2020-2023  润新知