gpt4 book ai didi

c# - 当我使用下面的 SqlDataAdapter 时,我是否需要担心插入/更新/删除/注入(inject)攻击?

转载 作者:行者123 更新时间:2023-11-30 16:27:09 25 4
gpt4 key购买 nike

当我使用以下代码时,我是否需要采取任何措施来防止插入/更新/删除/注入(inject)攻击?

public static DataSet getReportDataSet(string sqlSelectStatement)
{
SqlDataAdapter da = new SqlDataAdapter(sqlSelectStatement, new SqlConnection(GlobalVars.ConnectionString));
DataSet reportData = new DataSet();
da.Fill(reportData, "reportData");
return reportData;
}

这背后的想法是,我将从一系列 Crystal Reports 中提取 sql,从 MS SQL Server 中提取每个报表的数据,将数据绑定(bind)到报表,然后将填充的报表导出为 PDF。

我知道您可以使用内置功能让报告提取自己的数据,但我的测试表明将数据推送到报告的速度要快得多。我唯一的问题是我无法控制将要运行的报告。

人们将被要求为 SQL Server 提供他们自己的登录凭据,因此他们将只能看到他们有权访问的数据库中的数据......但是一些用户有写权限,我'我担心盲目地运行从 Crystal Report 中提取的 sql 字符串可能会允许插入/更新/删除/注入(inject)攻击......

我想我可能是白担心了,但我找不到任何明确说明这是否可以用于选择以外的事情。

编辑:

所以从最初的评论来看,我认为除了 SELECT 之外,我确实需要担心 SQL 语句。所以我的问题现在变成了;是否有一些方法可以指定 SqlConnection 只能用于“读取”(即选择)。

最佳答案

问题不在于适配器。问题是,如何将参数传递给 sql 命令。你不应该做这样的事情

string sql = "SELECT * FROM t WHERE name='" + name +"'";

改为使用参数:

SqlCommand cmd = new SqlCommand(SELECT * FROM t WHERE name = @name", conn);
SqlParameter param = new SqlParameter();
param.ParameterName = "@name";
param.Value = "John Doe";
cmd.Parameters.Add(param);

关于c# - 当我使用下面的 SqlDataAdapter 时,我是否需要担心插入/更新/删除/注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154578/

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