gpt4 book ai didi

sql-injection - 动态 WHERE 子句和 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-04 14:40:52 24 4
gpt4 key购买 nike

我需要为用户创建功能以确定选择的 WHERE 标准 - 该标准将是动态的。

有没有一种方法可以在不向 SQL 注入(inject)开放我的代码的情况下实现这一点?

我正在使用 C#/.NET Windows 应用程序。

最佳答案

使用参数化查询将大大有助于保护您免受 SQL 注入(inject)攻击,因为大多数坏事都发生在 where 条件的值部分。

例如给定条件 a=="hello"&& b=="WORLD",执行此操作:

select a,b,c,d
from table
where a=@pa and b=@pb -- this is generated dynamically

然后,绑定(bind) @pa="hello"@pb="WORLD",然后运行您的查询。

在 C# 中,您将从手头的 where 子句的内存表示开始,逐个元素地遍历它,并生成两个输出对象:

  • 带有 where 子句的字符串,其中常量由自动生成的参数引用 papb 等替换(使用您的这些盲参数最喜欢的命名方案:实际名称无关紧要)
  • 名称-值对字典,其中名称对应于您在 where 子句中插入的参数,值对应于您从表达式表示中提取的常量。

有了这些输出,您就可以使用字符串准备动态查询,使用字典添加参数值,然后对 RDBMS 源执行查询。

不要这样做

select a,b,c,d
from table
where a='hello' and b='WORLD' -- This dynamic query is ripe for an interjection attack

关于sql-injection - 动态 WHERE 子句和 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com