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

来源:互联网 发布:mysql 数据库迁移 编辑:程序博客网 时间:2024/06/05 01:06

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

错误的写法比如:

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


0 0
原创粉丝点击