【发布时间】:2015-09-18 23:13:05
【问题描述】:
问题
我正在编写一个 GUI 应用程序,它允许用户根据用户在 TextBox 中输入的 SELECT SQL 查询生成 Excel 文件。它将连接到 SQL 服务器,在数据库上运行选择,填充 DataTable 对象并将该数据推送到 Exel 文件。 我开发应用程序的方式容易受到 SQL 注入的攻击,用户可能能够传递任何 DML 查询,例如 DELETE OR UPDATE。
问题
SQLCLient 库中有没有办法阻止用户输入 DML 查询并执行它们?在传递 DELETE 命令时,我可以以某种方式强制 SQLCommand 对象抛出异常吗?
【问题讨论】:
-
创建一个只有select grants的数据库用户,并使用这个用户进行连接,然后在执行命令时处理数据库SqlException
-
@BhavO 是一个很好的方法,但它也可以让你暴露系统(例如,如果你坚持使用身份验证数据)根据你的需要,你还可以创建视图并只允许用户在该视图中进行选择或使用动态参数查询
-
当然,有很多方法可以做到这一点,但我认为它需要的变化最少,也取决于其他变量。
-
感谢 BhavO,但我更感兴趣的是在 C# 代码中防止这种情况。
标签: c# sql-injection sqlcommand dml sqlclient