我正在公開一個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類型的攻擊。而且您還必須確保該帳戶保持只讀狀態。但最後這是一個壞主意。 –