开发一个安全的小网站(一)防止sql注入

首先直接靠拼接字符串来做数据库的查询是很危险的

错误的写法比如:

string  flag = Request[参数];
string sql="select * from [表名] where [字段]="+flag;
 OleDbConnection conn = getconn();
            OleDbCommand com = new OleDbCommand();
 com.CommandText = sql;
            com.Connection = conn;
conn.Open();
            com.ExecuteNonQuery();
            com.Dispose();
            conn.Close();

这样如果传进来的参数为 'and 1=1--

则最后执行的sql语句为 select * from [表名] where [字段]=''and 1=1--'

这样就会将本来是数据的参数就变成了sql指令,这样很危险

安全的写法应该是用参数化,就是将传进来的参数当成数据,交到dbms处理

参数化的写法是这样

 public void inster(string cookie,string codeid)
        {
            int intcodeid = Convert.ToInt16(codeid);
            OleDbConnection conn = getconn();
            OleDbCommand com = new OleDbCommand();
            com.Connection = conn;
            com.CommandText = "insert into [table](cookie,codeid)values(@cookie,@codeid)";//这里指定参数

            com.Parameters.AddWithValue("@cookie", SqlDbType.VarChar);//这里指定参数的类型
            com.Parameters["@cookie"].Value = cookie;

            com.Parameters.AddWithValue("@codeid", SqlDbType.Int);//将传进来的参数放入sql参数中,这样在编译时就确定了类型,提高了执行效率
            com.Parameters["@codeid"].Value = intcodeid;

           
            conn.Open();
            com.ExecuteNonQuery();
            com.Dispose();
            conn.Close();

        }


你可能感兴趣的:(开发,安全)