asp.net关于防注入的问题

ttl5688 2009-12-23 09:55:37
我是个初学者,请问如果用分层的办法,建立一个验证层,再建立一个参数调用层,来实现数据的插入和修改,删除,但是在数据层中我使用“+”的方法,不是用的“@”参数传递的方法,请问能防住SQL注入吗?
另外我的代码是用“+”的方法写的:string sql = "insert message (work,name,phone,text) values ('" + work + "','" + name + "', '" + phone + "','" + text + "')";
其中work,name,phone,text为自定义参数,请问改成参数传递该怎么改?(“@”的方法)
...全文
168 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenny0810 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ttl5688 的回复:]
不行啊,5楼的代码,但是我为什么老师报这个错误啊?

必须声明标量变量 "@adminS"。
[/Quote]把你的代码贴出来看看
[Quote=引用 11 楼 ttl5688 的回复:]
5楼的高手,请问你的这段代码中“SqlParameter[] param”是什么意思?using空间是什么?
[/Quote]using System.Data.SqlClient;
wangbaiwu 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ttl5688 的回复:]
不行啊,5楼的代码,但是我为什么老师报这个错误啊?

必须声明标量变量 "@adminS"。
[/Quote]

你确定 values 里面有这个变量没有 ?
ttl5688 2009-12-23
  • 打赏
  • 举报
回复

不行啊,5楼的代码,但是我为什么老师报这个错误啊?

必须声明标量变量 "@adminS"。
tianmao111 2009-12-23
  • 打赏
  • 举报
回复
不过貌似他弄得是一个数组形式的,而且是直接实例化
tianmao111 2009-12-23
  • 打赏
  • 举报
回复
那是一个sqlcommand里的参数对象,专门望数据库里传 字段用的,可以是普通执行,也可以是存储过程、
比如sqlcommand.commandtype=commandtpye.preedure这个是存储过程。因为我忘了,大概是这样
ttl5688 2009-12-23
  • 打赏
  • 举报
回复
5楼的高手,请问你的这段代码中“SqlParameter[] param”是什么意思?using空间是什么?
woshifou 2009-12-23
  • 打赏
  • 举报
回复
学习。
lifangshan_fang 2009-12-23
  • 打赏
  • 举报
回复
写一个防sql注入的方法,在你给参数赋值的时候调用
ybblack001 2009-12-23
  • 打赏
  • 举报
回复
加入正则不允许单引号 限制长度,也可以
xiedu414 2009-12-23
  • 打赏
  • 举报
回复
问题1:你现在的写法完全不能防止注入

问题2:5楼的代码很完整
hitlcyu19 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yanglei6979431 的回复:]
C# codepublicstaticbool InsertData(string work,string name,int phone.string text)
{bool flag=false;string sql="INSERT INTO [message]([work],[name],[phone],[text]) values(@workS,@nameS,@phoneS,@textS)";
SqlParameter[] param=new SqlParameter[] {new SqlParameter("@workS",work),new SqlParameter("@nameS",name),new SqlParameter("@phoneS",phone),new SqlParameter("@textS",text),

};int count= DBHelper.ExecuteCmd(sql, param);if (count>0)
{
flag=true;
}return flag;
}

最后返回的就是  是否插入了  返回true为插入了数据
如果你想要其他的返回  你可以自己替换
[/Quote]
恩 这种方法
yanglei6979431 2009-12-23
  • 打赏
  • 举报
回复

public static bool InsertData(string work,string name,int phone.string text)
{
bool flag = false;
string sql =
"INSERT INTO [message]([work],[name],[phone],[text]) values(@workS,@nameS,@phoneS,@textS)";
SqlParameter[] param = new SqlParameter[] {
new SqlParameter("@workS",work),
new SqlParameter("@nameS",name),
new SqlParameter("@phoneS",phone),
new SqlParameter("@textS",text),

};
int count = DBHelper.ExecuteCmd(sql, param);
if (count > 0)
{
flag = true;
}
return flag;
}



最后返回的就是 是否插入了 返回true为插入了数据
如果你想要其他的返回 你可以自己替换
tianmao111 2009-12-23
  • 打赏
  • 举报
回复
cmd.paramenters.add(类型,大小,值);

那要看是不是由用户输入了,如果是由用户输入的地方尽量不要用拼写字符串的方式,要用参数方式,而且,要在客户端做一个格式检查,再在处理时套一个try块
TalesTen 2009-12-23
  • 打赏
  • 举报
回复
string sql = "insert message (work,name,phone,text) values (@work ,@name , @ phone ,@ text ;


silentwins 2009-12-23
  • 打赏
  • 举报
回复
尽量用SQL的参数
jwdream2008 2009-12-23
  • 打赏
  • 举报
回复
使用SQL参数啊!
string sql = "insert message (work,name,phone,text) values (@work ,@name,@ phone,@text)";
sugercgq 2009-12-23
  • 打赏
  • 举报
回复
用参数...
若用字符串相加方式...无论怎么过滤都有可能注入..
lvxiao715 2009-12-23
  • 打赏
  • 举报
回复
防sql注入有三种办法:一、将sql语句都用存储过程来替代;二、用sql参数来替代;三、验证字符串
realwar 2009-12-23
  • 打赏
  • 举报
回复
要防SQL注入就要了解所有可能的SQL注入.
个人认为不存在验证层一说. 这个属于输入校验Input validation. 应该与各页面结合起来. 同时使用客户端验证和服务器端验证. 之所以要同时用客户端和服务器端验证, 客户端验证是为了减少向服务器提交的次数, 服务器端验证是为了安全, 因为黑客可以绕过Javascript等向服务器提交非法数据. 所有需要输入的地方, 包括web form中每一个字段, URL中参数(即querystring), 都必须强制检查输入的合法性.

拼接SQL的方式很容易带来SQL注入的危险. 用SqlParameter参数传递, 只能部分杜绝SQL注入的危险. 真正能杜绝SQL注入的就是防止病从口入, 即在所有输入数据的地方加上严格的数据合法检查.

62,254

社区成员

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

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

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

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