SQL注入(Injection)简介

SQL注入(Injection)简介

SQL注入(SQL injection),是发生于应用程序与数据库层的安全漏洞。只要是支持处理SQL指令的数据库服务器,都有可能受到此种手法的攻击。

SQL注入产生的原因,是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程中,超越了数据本身,成为了SQL语句查询逻辑的一部分,然后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期之外的动作。

是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。

SQL注入演示

例如

SELECT * FROM users WHERE username = 'username_val' AND password='password_val';

在这里,username_val和password_val分别表示用户输入的用户名和密码。如果用户输入诸如“john”作为用户名和“123”作为密码之类的值,则结果语句将为:

SELECT * FROM users WHERE username='john' AND password='123';

如果用户是攻击者,他没有在输入字段中输入有效的用户名和密码,而是输入了类似以下内容的值: ' OR 'x'='x

在这种情况下,上述SQL查询将构造为:

SELECT * FROM users WHERE username='' OR 'x'='x' AND password='' OR 'x'='x';

该语句是有效的SQL语句,由于WHERE 'x'='x'始终为true,因此查询将返回users表中的所有行。您可以看到攻击者通过一个小技巧就能轻松访问数据库的所有敏感信息。

如果攻击者构造生成一个DELETE或UPDATE命令,后果甚至会更糟,攻击者可以从表中删除数据或永久更改其所有行。

防止SQL注入

要防止这种类型的攻击,就要时刻分清代码和数据的界限,避免未经检查的用户输入数据,意外变成了代码被执行。

不要信任用户提供的数据,而要验证用户输入,仅在校验通过后才能将数据提交给数据库。

进一步学习,可见

https://www.jb51.net/article/108987.htm

sql注入基础原理(超详细) - 简书

SQL注入攻击与防御 - 云+社区 - 腾讯云

Web安全之SQL注入攻击技巧与防范 - CSniper - 博客园

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/121536956