• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

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注入吗?
...全文
772 点赞 收藏 41
写回复
41 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
暴走的车轮 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
已经很保险了。
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2010-09-08 01:02
社区公告
暂无公告