避免动态列名称的SQL注入 [英] Avoid SQL injection for dynamic column names

查看:99
本文介绍了避免动态列名称的SQL注入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HI全部,

我有一个SQL查询,其中列名是动态的。如何避免sql注入这个



  string  .Format(< span class =code-string>  SELECT {0},{1},{2} FROM Employee,a,b,c) 



动态列数超过3.



我尝试过:



HI全部,

我有一个SQL查询,其中列名是动态的。如何避免sql注入这个



  string  .Format(< span class =code-string>  SELECT {0},{1},{2} FROM Employee,a,b,c) 



动态列大于3.

解决方案

一种可能的方法是获取表的架构并比较列名,不匹配无查询。


更新的解决方案。



 < span class =code-keyword> string  [] yourDynamicColumns = {  Column1  Column2  Column3}; 

string queryFormat = 选择{0}来自员工;
string dynamicQuery = ;
SqlDataAdapter da = new SqlDataAdapter( select来自INFORMATION_SCHEMA.COLUMNS的COLUMN_NAME,其中TABLE_NAME ='Employee',con);
DataTable dtColumns = new DataTable();
da.Fill(dtColumns);
foreach (DataRow row in dtColumns.Rows)
{
string columnName = row [ COLUMN_NAME ]的ToString();
if (yourDynamicColumns.Contains(columnName))
dynamicQuery + = columnName + ;
}
dynamicQuery = dynamicQuery.TrimEnd(' ,');
string query = string .Format(queryFormat,dynamicQuery);


HI All,
I have a sql query where the column names are dynamic. How to avoid sql injection for this

string.Format("SELECT {0},{1},{2} FROM Employee", a,b,c)


dynamic columns are more than 3.

What I have tried:

HI All,
I have a sql query where the column names are dynamic. How to avoid sql injection for this

string.Format("SELECT {0},{1},{2} FROM Employee", a,b,c)


dynamic columns are more than 3.

解决方案

One possible way is to get the schema for the table and compare the column names, no match no query.


Updated Solution.

string[] yourDynamicColumns = { "Column1", "Column2", "Column3" };

            string queryFormat = "Select {0} From Employee";
            string dynamicQuery = "";
            SqlDataAdapter da = new SqlDataAdapter("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'Employee'", con);
            DataTable dtColumns = new DataTable ();
            da.Fill(dtColumns);
            foreach (DataRow row in dtColumns.Rows)
            {
                string columnName = row["COLUMN_NAME"].ToString();
                if (yourDynamicColumns.Contains(columnName))
                    dynamicQuery += columnName + ",";
            }
            dynamicQuery = dynamicQuery.TrimEnd(',');
            string query = string.Format(queryFormat, dynamicQuery);


这篇关于避免动态列名称的SQL注入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆