我正在公开一个Web服务,它构造SQL SELECT
语句并接受来自控制器的参数。通用功能如下:在ASP.NET中筛选有害的SQL选择语句
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
声明(可以使用类似只读?)
注意的最好的事情:这类似于this question,但用户正在使用PHP,而我在ASP.NET MVC中,我也想在这里实现的只是允许SELECT
或'GET'语句。
可能的重复[如何防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –
@BrandonMoretz主席先生,您可能不会考虑,该用户正在询问有关PHP框架。所以提供的解决方案也建议使用PHP插件 –
一种方法是确保连接到数据库的帐户是只读的。那么你只限于DOS类型的攻击。而且您还必须确保该帐户保持只读状态。但最后这是一个坏主意。 –