gpt4 book ai didi

c# - C# 中自定义 SQL SELECT 查询的安全检查

转载 作者:行者123 更新时间:2023-11-30 14:57:20 26 4
gpt4 key购买 nike

我需要验证运行时用户提供的 SQL 查询仅用于选择数据 - 并且绝不能执行其他操作(删除、更新、插入...)或更改数据库(更改、创建, 删除, 截断, ...)

我不是在寻找受限用户解决方案(可能会在以后实现),而是在寻找 C# 查询“白名单”。

目前,这是我正在使用的代码:

    private bool ValidateDatasourceQuery(String datasourceQuery)
{
bool result = false;

try
{
bool isValid = true;

String query = datasourceQuery.Trim().ToLower();

if (query.Substring(0, 6) != "select") { isValid = false; }

if (query.Contains("delete ") || query.Contains(" delete")) { isValid = false; }
if (query.Contains("exec ") || query.Contains(" exec")) { isValid = false; }
if (query.Contains("insert ") || query.Contains(" insert")) { isValid = false; }
if (query.Contains("update ") || query.Contains(" update")) { isValid = false; }

if (query.Contains("alter ") || query.Contains(" alter")) { isValid = false; }
if (query.Contains("create ") || query.Contains(" create")) { isValid = false; }
if (query.Contains("drop ") || query.Contains(" drop")) { isValid = false; }
if (query.Contains("truncate table ") || query.Contains(" truncate table")) { isValid = false; }

result = isValid;
}
catch (Exception exception) { GUC_Utilities.TraceError(exception); }

return result;
}

有什么想法和想法吗?有没有办法通过这个检查并执行像DELETE这样的危险操作?您将如何改进此代码?

还有一个问题,ExecuteReader 方法只能运行 SELECT 语句,还是可以运行其他 CRUD 操作?就像下面的代码:

                //execute command
SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
dataTable.Load(sqlDataReader);

感谢您的宝贵时间!

PS 我只对改进和验证给定代码感兴趣 - 没有 GUI,目前可以选择特定角色和其他建议

编辑(2014-01-16):经过进一步研究和测试,我可以确认没有可靠的方法可以防止黑客在您的 SQL 查询中注入(inject)破坏性语句(分号、字符注入(inject)、内置函数等)。 ).保持数据完整性的唯一方法是创建具有有限权限集的特定用户角色。其他一切都必须被视为潜在的不安全因素。另外,请注意 EXECUTEREADER 确实可以运行 DELETE、UPDATE 和 INSERT 语句。

最佳答案

Sqldatareader 创建一个仅向前的数据读取器。选择是唯一有效的语句。

顺便说一句,选择任何类型的逻辑,特别是如果它们将被重用,应该变成一个存储过程以允许计划生成和缓存。

关于c# - C# 中自定义 SQL SELECT 查询的安全检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939621/

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