繁体   English   中英

当我使用以下 SqlDataAdapter 时,是否需要担心插入/更新/删除/注入攻击?

[英]Do I have to worry about inserts/updates/deletes/injection attacks when I use the following SqlDataAdapter?

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

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 中提取每个报表的数据,将数据绑定到报表,然后将填充的报表导出为 PDF。

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

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

我想我可能会担心什么,但是如果这可以用于除选择之外的其他事情,我找不到任何直接说明的内容。

编辑:

所以从最初的评论来看,我认为除了 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);

一般来说,我会说:是的,你必须这样做。

但也许 Crystal Reports 已经引用了 SQL-String。 自己尝试“攻击”,看看sqlSelectStatement包含什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM