SQL注入

发布时间:2024年01月24日

目录

背景:

注入出现的问题:

过程:

总结:


背景:

SQL 注入是一种常见的网络攻击技术,它利用了应用程序对用户输入数据的不充分验证和过滤,从而向应用程序的数据库中插入恶意的 SQL 代码。当应用程序使用字符串拼接的方式将用户输入直接拼接到 SQL 查询语句中时,如果没有对用户输入进行充分的验证和过滤,攻击者可以在输入中注入恶意的 SQL 代码。这些恶意代码会被数据库误认为是合法的查询语句的一部分,并被执行。

注入出现的问题:

1.SQL 注入攻击:如果应用程序未对用户提供的输入进行充分验证和过滤,攻击者可以在输入中注入恶意的 SQL 代码。通过拼接字符串来构建 SQL 语句时,攻击者可以插入恶意代码,改变原始查询的逻辑或执行非授权操作。

2.数据损坏:如果用户输入包含特殊字符、转义字符或无效的 SQL 语法,拼接字符串可能导致生成的 SQL 语句出现语法错误,进而导致数据损坏或无法正常执行查询操作。

3.可读性和维护性差:使用字符串拼接构建复杂的 SQL 语句会导致代码难以理解和维护。当 SQL 查询逻辑复杂时,手动构建字符串容易出错,增加了代码的复杂性和错误的可能性。

过程:

上面是我应用的一个例子:
我输入:

新闻’)delete category where id=11--

delete category where id=11:这是一条删除语句,目标是删除一个名为”categorty”表中ID为11的记录;

--:这是SQL中注释符号,用于表示单行注释,--后面的所有文本都会被解释器忽略并视为注释

可以看到最后的效果是id为11的语言新闻没有了,增加了一条id为27的新闻

我们在来看看数据库,现在没有ID为11的数据了,那是怎么消失的:

insert into category(name) values('新闻’)delete category where id=11--')

这个就是(新闻’)delete category where id=11--)完整的语句:

接下来我来执行这句话:
insert into category(name)values('娱乐新闻1')delete category where id=25--')

大家可以看到两行受到影响:说明删除了一条语句和增加了一条语句,我们来看最终执行的结果:

总结:

通过上面的例子和数据库的操作,相信大家看了应该一目了然,所以为了避免这些风险,应使用参数化查询或预编译语句来构建 SQL 语句。参数化查询通过将用户输入作为参数传递给 SQL 查询,而不是直接拼接到查询语句中,可以有效地防止 SQL 注入攻击。此外,参数化查询还能提高代码的可读性、维护性和性能,并减少潜在的错误

文章来源:https://blog.csdn.net/weixin_59272777/article/details/135817658
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。