栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

参数化查询与SQL注入

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

参数化查询与SQL注入

这行得通,但仍然容易受到注射的侵害吧?

是的,您的代码非常容易受到SQL注入的攻击。

我知道我应该使用参数化查询来避免SQL注入。

哦,是的。

我的问题是,当我将查询作为字符串参数传递时,该怎么办?

您根本不应该将查询作为字符串参数传递。相反,您应该将查询作为包含占位符和这些占位符值的字符串参数传递:

public static DataTable SqlDataTable(string sql, IDictionary<string, object> values){    using (SqlConnection conn = new SqlConnection(DatabaseConnectionString))    using (SqlCommand cmd = conn.CreateCommand())    {        conn.Open();        cmd.CommandText = sql;        foreach (KeyValuePair<string, object> item in values)        { cmd.Parameters.AddWithValue("@" + item.Key, item.Value);        }        DataTable table = new DataTable();        using (var reader = cmd.ExecuteReader())        { table.Load(reader); return table;        }    }}

然后像这样使用您的函数:

DataTable dt = SqlComm.SqlDataTable(    "SELECt * FROM Users WHERe UserName = @UserName AND Password = @Password",    new Dictionary<string, object>    {        { "UserName", login.Text },        { "Password", password.Text },    });if (dt.Rows.Count > 0){   // do something if the query returns rows}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号