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的数据库。在该库中需要记住的表名有:SCHEMATA 、TABLES、COLUMNS。

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

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

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

  需要记住的字段名分别为TABLES_SCHEMA和TABLE_NAME。

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

  需要记住的字段名有TABLE_SCHEMA、TABLE_NAME和COLUMN_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语句。

  

sql注入学习笔记的更多相关文章

  1. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  2. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  3. Java SQL注入学习笔记

    1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...

  4. Sql 注入----学习笔记2

    转载自:http://blog.51cto.com/quiterr/1699964 sql注入 sql注入98年第一次出现在<phrack>54期上. 注入攻击有两个关键条件,第一是用户能 ...

  5. Sql 注入----学习笔记

    先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...

  6. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  7. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  8. SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  9. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

随机推荐

  1. [HOJ2662]Pieces Assignment<状态压缩dp>

    描述: 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. 输入: 本题有多组测试数据,每组 ...

  2. SQL server 2008 简介

    一.简介 网状模型 关系模型(独立表) 拆分成有主键的表.连接表即可. 工资与奖金有了依赖关系.所以可以不保存奖金,计算得出结果. 二. 1. 2.环境配置 安装iis服务 https://jingy ...

  3. javascript中的符号 == 和 === 的区别

    ==  表示相等 即仅仅比较两边变量的数值是否相等. 相等运算符隐藏的类型转换,会带来一些违反直觉的结果. 这就是为什么建议尽量不要使用相等运算符. 至于使用相等运算符会不会对后续代码造成意外影响,答 ...

  4. css指示箭头两种实现方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【WPF学习】第六十二章 构建更复杂的模板

    在控件模板和为其提供支持的代码之间又一个隐含约定.如果使用自定义控件模板替代控件的标准模板,就需要确保新模板能够满足控件的实现代码的所有需要. 在简单控件中,这个过程比较容易,因为对模板几乎没有(或完 ...

  6. JVM基础结构与字节码执行引擎

    JVM基础结构 JVM内部结构如下:栈.堆. 栈 JVM中的栈主要是指线程里面的栈,里面有方法栈.native方法栈.PC寄存器等等:每个方法栈是由栈帧组成的:每个栈帧是由局部变量表.操作数栈等组成. ...

  7. php--一些新知识总结

    魔术方法__invoke() 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用 class Test { public function __invoke($a) { va ...

  8. 使用Cloudflare增强网站

    Cloudflare Cloudflare是美国的一家网络性能和安全公司,近期由于自己域名HTTP证书到期,了解到了Cloudflare,用到了它提供的CDN以及SSL 如何设置CDN 登入Cloud ...

  9. javascript入门 之 zTree(十三 移动/复制事件)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - copyNode / moveNode</T ...

  10. "文本"组件:<text> —— 快应用原生组件

     <template> <div class="container"> <text>H-UI</text> </div> ...