防止SQL注入,分析其原因并杜绝注入
一般情况下,都是在前台输入要插入的数据,然后后台直接把输入的数据连接到SQL语句上,就很容易遭到SQL注入的问题。 比如: string sql=”insert into category(name) values(‘ ”+name+” ’)"; //这样的数据输入是通过双引号进行的字符串拼接"+字符串 注入语句:aaa’)delete category where-- //--表示,--后面的代码被注释掉后,就不执行了 而在单独的SQL语句中:insert into category(name) values(‘aaa’) insert into category(name) values(‘aaa’)delete category where--') 若要防止SQL注入,可以使用带参数的@字符串,表示参数而不是字符串; string sql=”insert into category(name) values(@caName)"; //去掉@caName外面本来的单引号 接下来时赋值给@caName: SqlCommand.Parameters.Add(new SqlParameter ("@caName “,"jazyzheng"));//把jazyzheng赋值到参数caName中 重新赋值为SQL注入语句: SqlCommand.Parameters.Add(new SqlParameter ("@caName “,"aaa’)delete category where--")); 当在前台输入数据后(aaa’)delete category where--),数据是通过参数传入的,而不是通过直接的字符串拼接方式传入,所以输入的数据会直接被当做参数,而不会当做字符串而执行字符串中的SQL语句。 有SqlCommand.Parameters.Add(),也有SqlCommand.Parameters.AddRange()。 有时候插入的SQL语句参数不止一个,比如当插入新闻的时候,就会插入诸如标题,内容,时间等多个参数。AddRange传入的是一个数组。 SqlCommand.Parameters.AddRange(new SqlParameter[] { new SqlParameter("@caName","jazyzheng ") }); 比较完整的代码: public int ExecuteNonQuery(string sql,SqlParameter[] paras) public bool Insert(string caName) { new SqlParameter("@id",ca.Id), }; int res = sqlhelper.ExecuteNonQuery(sql,paras); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |