sql - 这是查看 SQL 准备语句的正确方法吗?
问题描述
我正在尝试寻找确认以查看我理解 SQL 准备语句的方式是否正确。
如果我理解正确,那就是您将用户的输入与语句本身分开。您没有将输入视为语句的一部分,或者在相同的上下文中。在 SQL 注入的情况下,上下文是一个字符串。该语句是一个长字符串,您允许用户输入他们想要的任何内容,然后该输入就是语句的一部分。
因此,取而代之的是,在其位置放置一些参数名称,将 SQL 语句保存在某处以供以后使用。参数不是字符串,而是一些指向数据的“对象”。然后如果你想传递类似的东西,那么参数以字符串'' or '1' ='1'
的形式指向这个值。因此,如果您将两者进行比较:
输入被附加到语句中
delete from t where 'hello'='' or '1' = '1';
// will delete
t``
语句中的某个参数指向输入
- 创建语句。这将作为语句存储在某处,而不是字符串。
delete* from t where password=$somepassword;
计算时where password=$somepassword
,$somepassword 被它指向的字符串替换。然后我们有这样的声明:
delete * from t where password='' or '1'='1';
// 它没有通过,因为除了字符串之外的所有东西都是一个语句。该字符串不是语句本身的一部分。由于任何字符串都不会被视为语句的一部分,因此不会发生 SQL 注入。
解决方案
推荐阅读
- highcharts - Highchart 放大后工具提示中显示不同的点以显示 simmer 值
- angular - 发送表单数据类型请求时出现 400 HTTP 错误
- c# - OnPropertyChange 导致 Xamarin.Forms Android 上的死锁
- angular - 如何直接从 Angular 11 调用 Zoom 的 REST-API?
- python - 从文件夹中的文件创建多个数据框
- powerbi - 每周比较独特的交易数据
- python - TypeError: 'kivy.weakproxy.WeakProxy' 对象不可调用
- reactjs - .NET Core 和 React 应用程序 - 多次加载 main.chunk.js
- c++ - 如何自动确定游戏对象的 ID?
- javascript - 导出默认值不适用于反应 - 错误或编码错误?