我是刚刚开始学习网络开发的学生。对于我的任务,我获得了一个网站,我需要对SQL注入进行安全保护。我试图使用参数这样做,但我收到一个错误。
原始代码(如下)工作正常:
function logInUser(name,pwd) {
var DBConn = getDBConnection();
var SQL = "SELECT * FROM Users WHERE UserName = '" + name + "' and UserPwd = '" + pwd + "'";
var RS = DBConn.Execute(SQL);
var valid = !RS.Eof;
if (valid) {
Session("UserID") = RS("UserID").value;
Session("UserName") = RS("UserName").value;
Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value;
}
DBConn.Close;
return valid;
}
我试图以这种方式修改它: function logInUser(name,pwd){ var DBConn = getDBConnection();
var uName = name;
var uPwd = pwd;
var SQL = "SELECT * FROM Users WHERE UserName = @0 and UserPwd = @1";
var RS = DBConn.Execute(SQL,uName,uPwd);
var valid = !RS.Eof;
if (valid) {
Session("UserID") = RS("UserID").value;
Session("UserName") = RS("UserName").value;
Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value;
}
当我这样做时,我得到:提供商错误'80020005'类型不匹配。
我也尝试修改语句以获取一个参数,但后来我得到引擎错误'80040e10'没有给出一个或多个必需参数的值。
非常感谢ANy的帮助,非常感谢!
答案 0 :(得分:0)
EDITED :::
var oCmd = Server.CreateObject("ADODB.Command")
var SQL = "SELECT * FROM Users WHERE UserName = ? and UserPwd = ?";
oCmd.CommandText = SQL
oCmd.ActiveConnection= DBconn
var oPar = oCmd.CreateParameter("UserName ", uName);
oCmd.Parameters.Append(oPar);
var oPar2 = oCmd.CreateParameter("UserPwd", uPwd);
oCmd.Parameters.Append(oPar2);
var RS =oCmd.Execute()
ORIGINAL :::
好的,我承认我不知道您正在寻找的数据库连接模型,但我敢打赌您需要将uName
和uPwd
放入对象中:
var credentials = {
0: uName,
1: uPwd
}
甚至可能:
var credentials = {
'@0': uName,
'@1': uPwd
}
可能是数组
var credentials = [uName, uPwd]
然后:
var RS = DBConn.Execute(SQL,credentials);