【发布时间】:2015-11-26 03:28:16
【问题描述】:
我公开了一个构建 SQL SELECT 语句并接受来自控制器的参数的 Web 服务。泛型函数如下所示:
DataTable SqlSelect (string select, string from, string Where, string orderby = "", string groupBy = "")
{
string sql = "SELECT " + select + " FROM " + from + " WHERE " + where
(orderby =="") ? "" : "ORDER BY " + orderby ...
//do other stuff
}
现在让我担心的是,基于上面给定的功能,用户现在可能会注入有害命令,例如:
SqlSelect("DROP TABLE 'TABLENAME'", "INFORMATION_SCHEMA.TABLES", "TABLE_NAME like %%'");
我想阻止。
现在我的问题是:我能做的最好的事情是防止用户使用 UPDATE、MODIFY、DELETE、TRUNCATE 表,并且只允许 SELECT 语句(可以使用类似 READ oNLY ?)
注意:这类似于this question,但用户正在使用 PHP,而我在 ASP.NET MVC 中,我想要在这里实现的只是允许 SELECT 或 'GET' 语句。
【问题讨论】:
-
@BrandonMoretz 先生,您可能不会考虑,用户在询问 PHP 框架。所以那里提供的解决方案也建议使用 PHP 插件
-
一种方法是保证连接数据库的账号是只读的。那么你只限于 DOS 类型的攻击。而且您还必须确保该帐户保持只读状态。但最终这是一个坏主意。
-
谢谢,我已经找到了解决方案。是的,我的第一个概念确实是个坏主意
-
@dr.Crow,考虑发布您的解决方案,以便其他看到此帖子的人受到启发。
标签: sql sql-server asp.net-mvc security