首页 > 数据库 >SQL Injection(SQL注入)

SQL Injection(SQL注入)

时间:2023-03-10 20:57:59浏览次数:37  
标签:username 数据库 查询 SQL Injection password 数据 注入

什么是SQL注入?

SQL(结构化查询语言)注入,通常称为 SQLi,是对 Web 应用程序数据库服务器的攻击,会导致执行恶意查询。当 Web 应用程序使用未经正确验证的用户输入与数据库通信时,攻击者有可能窃取、删除或更改私人和客户数据,并攻击 Web 应用程序的身份验证方法以获取私有信息或客户区。这就是为什么 SQLi 不仅是最古老的 Web 应用程序漏洞之一,而且也是最具破坏性的

什么是数据库?

如果您不习惯使用数据库或利用它们,可能需要习惯一些新术语,所以让我们从一些关于数据库的结构和工作方式的基础知识开始

数据库是以有组织的方式以电子方式存储数据集合的一种方式。数据库由 DBMS 控制,它是 Database Management System 的首字母缩写,DBMS 分为关系型或非关系型两个阵营,这个房间的重点将放在关系型数据库上,您会遇到的一些常见数据库是 MySQL、Microsoft SQL Server、Access、PostgreSQL 和 SQLite

在 DBMS 中,您可以有多个数据库,每个数据库都包含自己的一组相关数据。例如,您可能有一个名为“ shop ”的数据库。在此数据库中,您希望存储有关可供购买的产品的信息、已注册到您的在线商店的用户以及有关您收到的订单的信息。您将使用称为表的东西将此信息单独存储在数据库中,每个表都用唯一的名称标识。您可以在下图中看到这种结构,但您还可以看到企业如何使用其他单独的数据库来存储员工信息或客户团队

什么是表(table)?

表格由列和行组成,一种有用的方式是将表格想象成一个网格,列从左到右穿过顶部,包含单元格的名称,行从上到下,每一行都有实际数据

列(columns)

每个列,更好地称为字段,每个表都有一个唯一的名称。创建列时,您还可以设置它将包含的数据类型,常见的有整数(数字)、字符串(标准文本)或日期。一些数据库可以包含更复杂的数据,例如包含位置信息的地理空间数据。设置数据类型还可以确保不会存储不正确的信息,例如字符串“hello world”存储在用于日期的列中。如果发生这种情况,数据库服务器通常会产生一条错误消息。包含整数的列也可以启用自动递增功能;这为每一行数据提供了一个唯一的数字,该数字随着每一行的后续行而增长(递增),这样做会创建所谓的键字段,对于可用于在 SQL 查询中查找确切行的每一行数据,关键字段必须是唯一的

行(Rows)

行或记录是包含各个数据行的内容。当您向表中添加数据时,会创建新的行/记录,而当您删除数据时,会删除行/记录

关系数据库与非关系数据库:

关系数据库将信息存储在表中,并且表之间通常共享信息,它们使用列来指定和定义要存储的数据,并使用行来实际存储数据。这些表通常包含一个具有唯一 ID(主键)的列,然后在其他表中使用该 ID 来引用它并在表之间建立关系,因此称为关系数据库

另一方面,有时称为 NoSQL 的非关系数据库是任何一种不使用表、列和行来存储数据的数据库,不需要构建特定的数据库布局,因此每一行数据都可以包含不同的可以提供比关系数据库更大灵活性的信息。这种类型的一些流行数据库是 MongoDB、Cassandra 和ElasticSearch

什么是 SQL?

SQL(结构化查询语言-Structured Query Language)是一种用于查询数据库的功能丰富的语言,这些 SQL 查询称为语句

我们将在此任务中介绍的最简单的命令用于检索(选择)、更新、插入和删除数据。尽管有些相似,但一些数据库服务器有自己的语法并且在工作方式上有细微的变化。所有这些示例都基于 MySQL 数据库,值得注意的是,SQL 语法不区分大小写

SELECT

我们将学习的第一种查询类型是用于从数据库中检索数据的 SELECT 查询

select * from users;

id username password
1 jon pass123
2 admin p4ssword
3 martin secret123

第一个单词 SELECT 告诉数据库我们想要检索一些数据,* 告诉数据库我们想要从表中接收回所有列。例如,该表可能包含三列(id、username和password)。“from users”告诉数据库我们要从名为 users 的表中检索数据。最后,末尾的分号告诉数据库查询到此结束

下一个查询与上面类似,但是这次,我们不使用 * 返回数据库表中的所有列,而是只请求用usernamepassword字段

select username,password from users;

username password
jon pass123
admin p4ssword
martin secret123

以下查询与第一个查询一样,使用 * 选择器返回所有列,然后“LIMIT 1”子句强制数据库仅返回一行数据。将查询更改为“LIMIT 1,1”会强制查询跳过第一个结果,然后“LIMIT 2,1”会跳过前两个结果,依此类推。您需要记住第一个数字告诉数据库您希望跳过多少结果,第二个数字告诉数据库要返回多少行

select * from users LIMIT 1;

id username password
1 john pass123

最后,我们将使用 where 子句;这就是我们如何通过返回与我们的特定子句匹配的数据来精细地挑选出我们需要的确切数据

select * from users where username='admin';

id username password
2 admin p4ssword

标签:username,数据库,查询,SQL,Injection,password,数据,注入
From: https://www.cnblogs.com/Junglezt/p/17204617.html

相关文章

  • What is the difference between utf8mb4 and utf8 charsets in MySQL?
    Whatisthedifferencebetweenutf8mb4andutf8charsetsinMySQL?回答1UTF-8isavariable-lengthencoding.InthecaseofUTF-8,thismeansthatstoringo......
  • [第五空间 2021]yet_another_mysql_injection
    [第五空间2021]yet_another_mysql_injectionF12查看源代码发现?source提示,<?phpinclude_once("lib.php");functionalertMes($mes,$url){die("<script>alert('......
  • mysql锁总结
    概述:锁是在并发访问时,解决数据的有效性、一致性问题,有全局锁、表级锁、行级锁,锁粒度越小越好。全局锁:是对整个数据库实例加锁,一旦对整个数据库实例加了锁,那么就意味着这个......
  • postgresql 递归查询,查询父子节点关联关系
    postgresql递归查询,查询父子节点关联关系CREATETABLE"public"."sys_department"("id"int4NOTNULLDEFAULTnextval('sys_department_id_seq'::regclass),"na......
  • MySQL相关知识点整理
    1、关系型数据库与非关系型数据的区别?分类关系型数据库非关系型数据库概念关系型数据库(SQL)是由二维表及其之间的联系所组成的一个数据组织,最典型的数据结构是表,......
  • SQL语句
    一、DDL-数据定义语言 create/alter/drop 创库:createdatabase库名; 删库:dropdatabase库名; 创表:createtable表名; 删表:droptable表名; 改表:altertable表名......
  • 使用PostgreSQL而不是MySQL存储中型数据有什么好处?
    我可以明确地回答.我们之所以选择Postgres,是因为它在操作上比MySQL更可靠,而当时公司的创始人相信SQL数据库的可移植性.随着年份的发展,我们发现了这一点,我们发现基本上,Post......
  • NET - DependencyInjection - Scrutor
    1安装1.1命令PM>NuGet\Install-PackageScrutor-Version4.2.12使用2.1装配扫描Scrutor有两个针对服务集合 ServiceCollection 类的扩展方法:Scan 和Decor......
  • 【WinForm】 自学笔记三:使用 FreeSql 连接数据库,并对数据进行增删改查
    前面使用 SqlConnection 连接数据可以的方法,每一次进行数据操作都要编写相应的SQL语句,操作起来比较繁琐。为了简化代码的编写,提高代码的可靠性,使用了FreeSql插件,来减......
  • 通过 sqlcmd 命令 + Windows 定时任务实现数据库的定时备份
    SQLServer2022Developer是一个全功能免费版本,许可在非生产环境下用作开发和测试数据库。公司用的SQLServer2022Express是SQLServer的一个免费版本,只有基础的......