ASP.NET SQL用Parameters传参 能完全防止SQL注入吗?

暴走的车轮 2010-09-08 01:02:28
形如

/// <summary>
/// 更新一条数据
/// </summary>
public void Update(Web.Model.T_Class model)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update T_sadfsd set ");
strSql.Append("CName=@CName,");
strSql.Append("CFatherID=@CFatherID");
strSql.Append(" where CID=@CID ");
SqlParameter[] parameters = {
new SqlParameter("@CID", SqlDbType.Int,4),
new SqlParameter("@CName", SqlDbType.NVarChar,50),
new SqlParameter("@CFatherID", SqlDbType.Int,4)};
parameters[0].Value = model.CID;
parameters[1].Value = model.CName;
parameters[2].Value = model.CFatherID;

DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
}



这样如果不对数据进行过滤可以防止SQL注入吗?
...全文
895 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
暴走的车轮 2010-09-11
  • 打赏
  • 举报
回复
没有可以注入的例子吗~?晚上结贴~~~
leiziaitudou 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q107770540 的回复:]
参数化的SQL语句 只能说尽可能的让网站避免SQL注入的危险
它会将单引号等这些危险的字符转义,不会再对库造成威胁
最好还是在参数传入前,对参数进行相应的检测与分析
[/Quote]
高见~~~
边城的刀声 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 bclz_vs 的回复:]

引用 19 楼 kdalan 的回复:

楼上的朋友能举一写例子出来吗?什么情况下不能防止啊?我测试下看看.....

好,晚上见
[/Quote]
是我之前理解有问题,放心用吧,注入不了的
火星大能猫 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 dalmeeme 的回复:]
参数化sql语句完全能够防止sql注入,我说得是完全。不必再过滤什么了。
参数化sql是直接生成sql数据库查询底层的参数,而不是通过编译器和解释器根据sql语句自动分词,确定参数的值(这样容易被骗)。
比如:select 姓名 from 基本信息 where 学号='18',客户构造sql语句:select 学号 from 基本信息 where 学号='' or '1'='1',sql数据库……
[/Quote]
heaventohell17 2010-09-09
  • 打赏
  • 举报
回复
参数,和存储过程

已经可以防一般人了,而那种防不了的大牛,是你怎么也防不了的
jarod0407 2010-09-09
  • 打赏
  • 举报
回复
不能,我就曾经碰到过这种攻击,全部用参数化的SQL语句不能完全的避免注入式攻击,还是要自己写一些方法自己把非法字符过滤掉。
fingternest 2010-09-09
  • 打赏
  • 举报
回复
这样已经比较安全了!
边城的刀声 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 kdalan 的回复:]

楼上的朋友能举一写例子出来吗?什么情况下不能防止啊?我测试下看看.....
[/Quote]
好,晚上见
边城的刀声 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 kkbac 的回复:]

完全没问题, 放心用吧.

用参数后菜鸟黑客攻不进,

高手黑客一般只攻击五角大楼,

不怕
[/Quote]
有理
加油馒头 2010-09-09
  • 打赏
  • 举报
回复
基本可以防止注入
么有问题
ruiandli 2010-09-08
  • 打赏
  • 举报
回复
这样是不能完全避免SQL注入的,最好还是在传参之前过滤下
  • 打赏
  • 举报
回复
可以防止sql注入了,如果没有其他漏洞的话
haijuanliang 2010-09-08
  • 打赏
  • 举报
回复
/// <summary>
/// sql防注入
/// </summary>
/// <param name="pg"></param>
public static void Sqlzy(Page pg)
{
string URL = pg.Request.Url.ToString();//Page.Request.Url.ToString();
if (filterSql(URL) != 0)
{
pg.Response.Redirect("/Err.aspx");
return;
}

if (pg.Request.RequestType == "POST")
{
NameValueCollection postData;

try
{
postData = pg.Request.Form;
}
catch
{
return;
}
string InputStr = "";
foreach (string postKey in postData)
{
try
{
Control ctl = pg.FindControl(postKey);
if (ctl as TextBox != null)
{
InputStr = ((TextBox)ctl).Text;
}
if (ctl as HtmlInputControl != null)
{
InputStr = ((HtmlInputControl)ctl).Value;
}
if (ctl as HtmlTextArea != null)
{
InputStr = ((HtmlTextArea)ctl).Value;
}
}
catch { }

if (filterSql(InputStr) != 0)
{
pg.Response.Redirect("/Err.aspx");
break;
return;
}
}
}

}

我们都是这样防注入的
边城的刀声 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 imfor 的回复:]

可以了。
说不能完全防的能不能举个例子?
[/Quote]
不能完全防止,可以看看《黑客攻防技术宝典:web 实战篇》中是怎么攻击参数化SQL的,不过这种情况得配合应该上的漏洞
myhope88 2010-09-08
  • 打赏
  • 举报
回复
用参数化一般很难再注入了
porschev 2010-09-08
  • 打赏
  • 举报
回复
措施可以多点。。。。可以在前面就先过滤掉关键字。。。
imfor 2010-09-08
  • 打赏
  • 举报
回复
可以了。
说不能完全防的能不能举个例子?
pigHead_chen 2010-09-08
  • 打赏
  • 举报
回复
不能完全防,不过一些简单的注入方法就不行了
lilin8905 2010-09-08
  • 打赏
  • 举报
回复
这个应该很难注入了
yzf86211861 2010-09-08
  • 打赏
  • 举报
回复
已经很保险了。
加载更多回复(20)

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧