Frage

Was ist eine starke Art und Weise gegen SQL-Injection für ein klassisch asp App zu schützen?

FYI ich es mit einer Zugang DB verwenden. (Ich habe nicht die App schreiben)

War es hilfreich?

Lösung

Stored Procedures und / oder Prepared Statements:

https://stackoverflow.com/questions / 1973 / what-is-the-best-way-to-abwehren-sQL-Injektion-Angriffe

Kann ich schützen gegen SQL Injection von einfachen Anführungszeichen und die umliegenden Benutzereingaben mit einfachen Anführungszeichen zu entkommen?

Fangen SQL-Injection und anderen Malicious Webanfragen

Mit Access-DB, können Sie es tun, aber wenn Sie bereits besorgt sind über SQL Injection, ich glaube, Sie müssen auf jeden Fall Zugang zu bekommen.

Hier ist ein Link auf die Technik in Access:

http://www.asp101.com/samples/storedqueries.asp

Beachten Sie, dass normalerweise, was von der Injektion schützt, ist nicht die gespeicherte Prozedur selbst, sondern die Tatsache, dass es parametriert und nicht dynamisch. Denken Sie daran, dass auch SPs, die dynamischen Code bauen kann Injektion anfällig sein, wenn sie Parameter verwenden, in gewisser Weise den dynamischen Code zu bauen. Insgesamt ziehe ich SPs, weil sie eine Zwischenschicht bilden, die die Anwendungen auf die Datenbank zu erhalten, so dass die Anwendungen sind nicht einmal erlaubt, beliebigen Code in erster Linie ausgeführt werden.

Darüber hinaus kann der Ausführungspunkt der gespeicherten Prozedur anfällig sein, wenn Sie Befehl und die Parameter nicht verwenden, z das ist immer noch anfällig, weil sie dynamisch aufgebaut ist und kann eine Injektion Ziel sein:

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;

Beachten Sie, dass Ihre Datenbank einen eigenen Umfang verteidigen muss, und wenn verschiedene Logins Rechte in Tabellen INSERT/UPDATE/DELETE haben, jeder Code in diesen Anwendungen (oder kompromittiert Anwendungen) kann ein mögliches Problem sein. Wenn die Anmeldungen nur Rechte haben, um gespeicherte Prozeduren auszuführen, bildet dies einen Trichter, durch die man viel leichter die richtige Verhalten gewährleisten. (Ähnlich wie bei OO Konzepte, bei denen Objekte verantwortlich sind für ihre Schnittstellen Bestrahlung und alle ihre inneren Abläufe.)

Andere Tipps

Hier sind ein paar sqlinject Skripte ich vor eine einfache Version eine lange Zeit gemacht und eine erweiterte Version:

function SQLInject(strWords) 
dim badChars, newChars, i
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''")
newChars= replace(newChars, " ", "")
newChars= replace(newChars, "'", "|")
newChars= replace(newChars, "|", "''")
newChars= replace(newChars, "\""", "|")
newChars= replace(newChars, "|", "''")
SQLInject=newChars
end function 


function SQLInject2(strWords)
dim badChars, newChars, tmpChars, regEx, i
badChars = array( _
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _
"updatetext", "writetext", "reconfigure", _
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords
for i = 0 to uBound(badChars)
Set regEx = New RegExp
regEx.Pattern = badChars(i)
regEx.IgnoreCase = True
regEx.Global = True
newChars = regEx.Replace(newChars, "")
Set regEx = nothing
next
newChars = replace(newChars, "'", "''")
SqlInject2 = newChars
end function

„Eine starke Art und Weise gegen SQL-Injection für eine klassische asp App zu schützen“ ist rücksichtslos alle Eingaben zu bestätigen. Period.

Stored Procedures allein und / oder ein anderes Datenbanksystem nicht unbedingt gleich gute Sicherheit.

MS hat kürzlich ein SQL-Injection-Inspection-Tool aus, die für unvalidated Eingang sucht, die in einer Abfrage verwendet wird. Das ist, was Sie achten sollten.

Hier ist der Link: Der Microsoft Source Code Analyzer verfügbaren SQL-Injection-Tool ist eine SQL-Injection-Schwachstellen in ASP-Code zu finden

parametrisierte querys verwenden, müssen Sie ein Befehlsobjekt erstellen, weisen Sie Parameter mit einem Namen und einem Wert, wenn Sie dies tun, würden Sie sich um nichts anderes zu kümmern (Bezug nehmend auf SQL-Injection natürlich;))

http://prepared-statement.blogspot.com /2006/02/asp-prepared-statements.html

Und nicht vertrauen Stored Procedures, können sie sich auch ein Angriffsvektor, wenn Sie nicht vorbereitete Anweisungen verwenden.

, wenn gespeicherte Prozeduren sind keine Option - und auch wenn sie - validieren alle Eingaben gründlich

Hey, jede Datenbank so gut wie Entwickler, der es verwendet.

Nichts mehr aber auch nicht weniger.

Wenn Sie gute Entwickler sind, können Sie E-Commerce-Website mit Textdateien als eine Datenbank aufzubauen. Ja, es wird nicht so gut wie Oracle basierende Website, aber es wird für kleine Unternehmen wie zu Hause ganz gut tun basierten, individuelle Schmuckherstellung.

Und wenn Sie gute Entwickler sind Sie Inline-SQL-Anweisungen nicht auf Ihren ASP-Seiten verwenden. Auch in Access haben Sie die Option Abfragen zu erstellen und zu verwenden ..

Speicher Procs mit Datenüberprüfung, zusammen mit html kodieren -. Ist der beste Weg, um alle SQL-Injection-Angriffe zu verhindern

Die Microsoft Source Code Analyzer für SQL-Injection-Tool verfügbar ist, um SQL-Injection-Schwachstellen zu finden in ASP-Code

Die Umstellung auf SQL Express zumindest ist eine gute Option. Es wird alles viel sicherer machen. Obwohl stark Parameter und Stored Procedures mit helfen kann. Ich empfehle auch, dass Sie die Eingaben sorgfältig zu überprüfen, um sicherzustellen, dass sie dem entsprechen, was Sie erwarten.

Für Werte wie Zahlen ist es ziemlich einfach, die Zahl zu extrahieren, um sicherzustellen, dass es in der Tat ist nur eine Zahl. Entfliehen Sie alle Sonderzeichen für SQL. Dadurch wird den versuchten Angriff von der Arbeit zu verhindern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top