我试图通过使用以下查询保护用户输入来防止Delphi应用程序中的SQL注入:
procedure TForm1.Button1Click(Sender: TObject);
var userNameID : string;
begin
userNameID := edit1.Text;
with adoquery1 do
begin
sql.Clear;
sql.Add('select * from users where id = :'''+userNameID+''';');
Open;
end;
end;
但是它没有返回任何结果。
能告诉我我的代码有什么问题吗?
答案 0 :(得分:5)
您的代码对阻止SQL注入没有任何作用,因为您仍在直接将文本连接到查询。您的SQL语法也无效。
类似的事情会起作用:
procedure TForm1.Button1Click(Sender: TObject);
begin
AdoQuery1.SQL.Text := 'select * from users where id = :ID');
AdoQuery1.Parameters.ParamByName('ID').AsString := edit1.Text;
AdoQuery1.Open;
end;