Ich habe mir heute eine alte gespeicherte Prozedur angesehen und festgestellt, dass sie quotename
für die Eingabeparameter verwendet wird. Nachdem ich ein bisschen gegraben hatte, um herauszufinden, was das genau macht, bin ich auf diese Seite gestoßen . Ich verstehe jetzt, was es tut und wie es verwendet wird, aber die Site sagt, dass es als Abschwächung von SQL Injection-Angriffen verwendet wird. Wenn ich mit asp.net Apps entwickelte, die eine Datenbank direkt abfragten, verwendete ich ADO.Net-Parameter, um Benutzereingaben als Literalwert zu übergeben, und machte mir nie wirklich Sorgen, sie in meinen gespeicherten Prozeduren zu schützen.
Ich schreibe jetzt eine gespeicherte Prozedur, die von Anwendungen verwendet wird, die ich nicht schreibe. Daher muss ich versuchen, mich vor Injektionsangriffen auf Prozedurebene zu schützen. quotename
Dies ist der beste Weg, dies zu tun, oder gibt es eine neuere / bessere Funktion Methode?
Code, der mich zu diesem Gedankenmuster gebracht hat ( @parm1
ist ein Benutzereingabeparameter):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '