使用delphi 2010,我想知道是否有一些事情要逃避以下字符串以使其免受sql注入攻击:
我的字符串:
SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email="'+
email+'" and login_pass="'+password+'"';
如何重写此字符串,使其比某人在“我的TEditbox中输入”作为他的电子邮件或密码更安全!
答案 0 :(得分:13)
使用参数,让数据库驱动程序处理这些内容。
SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email= :email'+
' and login_pass = :password';
SQLQuery1.ParamByName('email').AsString := EMail;
SQLQuery1.ParamByName('password').AsString := Password;
答案 1 :(得分:0)
'with''的基本替换应该确保你不会在文本字段中注入。
根据经验,确保添加到数据库的所有输入都符合您期望的模式。 对于电子邮件地址,邮政编码和密码,您可以定义一个简单的正则表达式来验证其有效性。
请记住,数字字段也可以注入,也应该验证。
答案 2 :(得分:-1)
如果由于某种原因你不能使用参数,你可以使用这样的函数:
USES SysUtils;
FUNCTION QuotedStr(CONST S : STRING) : STRING;
BEGIN
Result:='"'+ReplaceStr(S,'"','""')+'"'
END;
然后
SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email='+
QuotedStr(email)+' and login_pass='+QuotedStr(password);
(这假设您的数据库提供程序使用双引号来分隔字符串,并且带引号的字符串中的两个连续双引号实际上是一个双引号,即一个双引号)。