gpt4 book ai didi

c# - 哪种方法可以更好地阻止 sql 注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:28 25 4
gpt4 key购买 nike

我有数据库功能,可以根据不同的条件选择数据。有两种可能的方法可以实现这一点。首先

    public string select(string name)
{
string s = null;
query = "select * from tablename where name=@name";
con.Open();
com=new SqlCeCommand(query,con);
com.Parameters.AddWithValue("@name",name);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}

在这种方法中,我需要为查询中的小变化编写不同的函数,例如 order by 、地址代替名称或 where 查询中的多个参数、前 20 名等。但这种方法在 sql 注入(inject)方面是安全的。第二

    public string select(string query)
{
string s = null;
con.Open();
com=new SqlCeCommand(query,con);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}

在第二种方法中,我在带有值的函数参数中传递数据库查询,所以我不需要 com.Parameters.AddWithValue("@name",name); 也不需要编码不同选择查询更改的功能。查询中的参数值由代码而不是用户给出。在这种方法中是否可能进行 sql 注入(inject),因为用户没有为参数提供输入。

哪个安全且高效,因为我的应用程序无法承受数据丢失。

最佳答案

主要防御:

选项 #1:使用准备好的语句(参数化查询)

选项 #2:使用存储过程

选项 #3:转义所有用户提供的输入

额外的防御:

同时执行:最小权限

同时执行:白名单输入验证

来源www.owasp.org

关于c# - 哪种方法可以更好地阻止 sql 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com