哪一个是更好的方法来阻止sql注入

本文关键字:sql 注入 方法 更好 哪一个 | 更新日期: 2023-09-27 18:11:35

我有数据库功能,在不同的条件下选择数据。实现这一目标有两种可能的方法。第一个

    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;
    }

在这种方法中,我需要为查询中的小变化编写不同的函数,如顺序,地址代替名称或查询中的多个参数,top 20等。但是这种方法在sql注入方面是安全的。第二个

    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注入?

哪一个是安全的,高效的,因为我的应用程序不能承受数据丢失

哪一个是更好的方法来阻止sql注入

主要防御:

选项#1:使用预处理语句(参数化查询)

选项#2:使用存储过程

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

额外的防御:

Also Enforce: Least Privilege

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

源www.owasp.org

您考虑过使用Linq to SQL或EDM吗?使用对象意味着你的代码(理论上)是安全的,不受SQL注入攻击。

在这种方法中,当用户不提供输入时,sql注入是否可能对参数。

只要您的用户不与数据库交互,那么谁会试图在您的参数中注入SQL。

一般来说,只要你使用参数与你的查询,你是安全的SQL注入。