大家在写asp.net 的时候都是如何防注入的呢 直接replace 还是用cmd.Parameters来添加参数呢。我现在想搞个函数来实现将接收不同数目的字段然后用cmd.Parameters添加字段来达到防注入的目的。但这用的不是很熟悉,希望谁能给我一个例子 。 谢谢
解决方案 »
- java和.net向左还是向右???
- 怎样获得gridview的PagerTemplate里面的TextBox控件的Text
- 求一排序的存储过程!!!大侠们帮忙啊,解决后另开帖给分!
- linq to sql连接数据库后上传FTP
- 在datagrid中,如何跳转页(输入那一页,就转到那一页中去)
- 如何写这个接口?(急!!!!!在线等)
- 菜鸟问题:如何写语句实现数据库的连接?
- 问一个页面时间输入框(限制时间)的问题!! 都进来看看 帮帮忙呗~~
- 为什么我无法装数据库
- 在datagrid中嵌入了checkbox,我想在datagrid1_editcommand事件中实现改变checkbox绑定的字段?如何实现?
- createControlRange() 这个方法到底在哪里?
- dropdownlist 页面刷新,保持上次的选项
基本都是存储过程做的,也可以用正则验证。
这也是比较普遍的问题,
Command.Parameters 就是ado.net 一个对象。比较简单查查资料就好了。
2.自己写个方法过滤SQL关键字
想要动态接收字段列表,
只能通过字符串拼接,而且也不能获得参数化查询的执行计划性能优势;不过,sql注入是可以防止的,很简单,你把函数接收的字段列表(不管是UI来的,还是硬编码的)
统统和数据表的字段列表匹配一下,命中的就接受,否则抛出异常
/// <summary>
/// 执行存储过程,返回受影响的行数(主要用于增、删、改的存储过程)
/// </summary>
/// <param name="prcName">存储过程名称</param>
/// <param name="sp">受影响的行数</param>
/// <returns></returns>
public static int GetNonQuery(string prcName, SqlParameter[] sp)
{
SqlCommand cmd; using (SqlConnection cn = new SqlConnection(strcon))
{
cn.Open();
cmd = new SqlCommand(prcName, cn);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter s in sp)
{
cmd.Parameters.Add(s);
} return cmd.ExecuteNonQuery();
}
} public int DeleteAdmin(adminModle info)
{
string ProName = "delete_admin";//存储过程删除管理员
SqlParameter[] sqlparmeters = { new SqlParameter("@id", SqlDbType.Int)
};
sqlparmeters[0].Value = info.Aid1;
int i = DBhelper.GetNonQuery(ProName, sqlparmeters);
return i;
}