您的位置:首页 > 运维架构 > 网站架构

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

2015-09-02 21:58 507 查看
首先直接靠拼接字符串来做数据库的查询是很危险的

错误的写法比如:

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

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: