|
1
7
在第一个查询的情况下,有人可以将以下值传递给
当然,这对您的数据库来说是灾难性的。
我认为在第二个查询的情况下,数据库将在内部将其编译为单个查询
我们将以以下查询结束:
换句话说,我们试图注入代码,但我们真正能做的就是注入一个字符串
参数
. 这可能会引发错误的查询,但不允许恶意用户调用
这是一个简单的例子,展示了准备好的语句的威力。对于准备好的语句,在查询实际运行之前,已经编译了查询的常规模板或结构。语句的某些部分具有参数占位符,但这些占位符不会通过串联来改变查询,而只能通过分配定位值来改变查询。 |
|
|
2
1
第一次查询时,数据库不知道它是否有更多的条件,或者查询的确切目的是什么,然后数据库会盲目地信任查询。
我现在用例子来解释。 如果您喜欢:
有人可以轻松地在那里注入SQL,只需向用户填充
现在,让我们使用参数进行操作:
查询看起来相同,但工作方式不同,数据库将处理查询,获得@username参数和一个空白密码,然后它将显示为false。 我想补充一点,这取决于您如何使用SQL参数以及您使用哪种语言编程,这或多或少是安全的,但最安全的方法之一是使用带有参数化查询的存储过程。 |
|
|
cagta · 如何使用此python脚本避免硬编码sql表达式? 8 年前 |
|
|
John · MySQL php查询缺陷 8 年前 |
|
|
Arunabh · 在不使用预处理语句的情况下摆脱SQL注入 8 年前 |