我是个初学者,请问如果用分层的办法,建立一个验证层,再建立一个参数调用层,来实现数据的插入和修改,删除,但是在数据层中我使用“+”的方法,不是用的“@”参数传递的方法,请问能防住SQL注入吗?
另外我的代码是用“+”的方法写的:string sql = "insert message (work,name,phone,text) values ('" + work + "','" + name + "', '" + phone + "','" + text + "')";
其中work,name,phone,text为自定义参数,请问改成参数传递该怎么改?(“@”的方法)
另外我的代码是用“+”的方法写的:string sql = "insert message (work,name,phone,text) values ('" + work + "','" + name + "', '" + phone + "','" + text + "')";
其中work,name,phone,text为自定义参数,请问改成参数传递该怎么改?(“@”的方法)
string sql = "insert message (work,name,phone,text) values (@work ,@name,@ phone,@text)";
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为插入了数据
如果你想要其他的返回 你可以自己替换
比如sqlcommand.commandtype=commandtpye.preedure这个是存储过程。因为我忘了,大概是这样
不行啊,5楼的代码,但是我为什么老师报这个错误啊?必须声明标量变量 "@adminS"。
你确定 values 里面有这个变量没有 ?
using System.Data.SqlClient;
个人认为不存在验证层一说. 这个属于输入校验Input validation. 应该与各页面结合起来. 同时使用客户端验证和服务器端验证. 之所以要同时用客户端和服务器端验证, 客户端验证是为了减少向服务器提交的次数, 服务器端验证是为了安全, 因为黑客可以绕过Javascript等向服务器提交非法数据. 所有需要输入的地方, 包括web form中每一个字段, URL中参数(即querystring), 都必须强制检查输入的合法性.拼接SQL的方式很容易带来SQL注入的危险. 用SqlParameter参数传递, 只能部分杜绝SQL注入的危险. 真正能杜绝SQL注入的就是防止病从口入, 即在所有输入数据的地方加上严格的数据合法检查.