gpt4 book ai didi

sql - 可以删除非字母数字字符防止 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-04 17:53:01 30 4
gpt4 key购买 nike

想象一个简单的查询:

Declare @sql varchar(100)
Declare @table varchar(20)
Set @table = 'foo'
select @sql = 'select * from ' + @table
exec(@sql)

在有人将@table 更改为类似'sys.tables; 之前,这会正常工作;删除表格栏'

但是我想知道如果@table 中的所有非字母数字字符都被删除了,SQL 注入(inject)还会发生吗?在此示例中,恶意 @table 将 = 'systablesdroptablebar'。

现在我知道使用 sp_executesql 和参数化 SQL 是最佳实践。所以不要给我任何垃圾!我很好奇,删除所有非字母数字字符的字符串如何被破坏以提供 SQL 注入(inject)负载。

为清楚起见,此代码块将在 Microsoft SQL Server 2008 或更高版本中执行。

最佳答案

对于您的案例,我没有妥协的好例子,但我可以告诉您我可能会如何尝试针对它进行防御性编程...

  1. 考虑将表访问列入白名单

  2. 也许您可以限制对特定表子集的访问。理想情况下,这些表遵循通用的命名方案,以便可以根据该方案验证表名。

  3. 如果将表名列入白名单不是一个选项——您至少可以通过查询 sys.tables 来检查提供的表名是否存在于数据库中。系统表。

  4. 对于SQL Server,你应该把表名放在方括号中

SELECT COUNT(*) FROM [" + tableName + "]"

有关 SQL 注入(inject)的资源将彻底回​​答您的问题:OWASP Cheat Sheet

关于sql - 可以删除非字母数字字符防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953226/

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