SQL Injection – Schnelltest
Um einen evtl. gefährlichen String zu testen, habe ich nachfolgend einen Schnelltest in Form einer Scalar-Funktion entwickelt.
Diese Funktion übernimmt einen potenziell gefährlichen String und prüft ihn auf die wichtigsten Merkmale.
- Es dürfen keine String-Hochkommas vorkommen die nicht paarig sind.
- Desweiteren sind DDL-Kommandowörter als potzenziell gefährlich einzustufen.
Wenn ein “Problem” gefunden wurde, wird eine Fehlermeldung ausgegeben. Im anderen Fall wird der Originalstring als Rückgabewert präsentiert.
Natürlich erhebt diese Funktion keinen Anspruch auf Vollständigkeit, jedoch ist sie gerade bei der Entwicklung generischer (metadatengesteuerter) Prozeduren für den schnellen Test gerade dieser Metatabellen sehr nützlich.
Wenn noch jemand eine Ergänzung hierfür einfällt … bitte einfach einen kurzen Kommentar posten. Damit bekommen auch andere Besucher dieses Blogs diese Infos mit.
| T-SQL | | copy code | | ? |
| 01 | CREATE FUNCTION dbo.SQLInjection_Quicktest(@Wert VARCHAR(MAX)) |
| 02 | RETURNS VARCHAR(MAX) |
| 03 | AS |
| 04 | BEGIN |
| 05 | IF (LEN(@Wert)-LEN(REPLACE(@Wert,'''',''))) % 2 <> 0 |
| 06 | BEGIN |
| 07 | SET @Wert = '' |
| 08 | SET @Wert = '** ERROR - String-Delimiter nicht paarig! **' |
| 09 | END |
| 10 | |
| 11 | SET @Wert = LOWER(@Wert) |
| 12 | |
| 13 | IF @Wert Like '%[^a-z0-9_]delete[^a-z0-9_]%' or |
| 14 | @Wert Like '%[^a-z0-9_]update[^a-z0-9_]%' or |
| 15 | @Wert Like '%[^a-z0-9_]truncate[^a-z0-9_]%' or |
| 16 | @Wert Like '%[^a-z0-9_]drop[^a-z0-9_]%' or |
| 17 | @Wert Like '%[^a-z0-9_]exec[^a-z0-9_]%' or |
| 18 | @Wert Like '%[^a-z0-9_]execute[^a-z0-9_]%' or |
| 19 | @Wert Like '%[^a-z0-9_]create[^a-z0-9_]%' or |
| 20 | |
| 21 | @Wert Like '%delete[^a-z0-9_]%' or |
| 22 | @Wert Like '%update[^a-z0-9_]%' or |
| 23 | @Wert Like '%truncate[^a-z0-9_]%' or |
| 24 | @Wert Like '%drop[^a-z0-9_]%' or |
| 25 | @Wert Like '%exec[^a-z0-9_]%' or |
| 26 | @Wert Like '%execute[^a-z0-9_]%' or |
| 27 | @Wert Like '%create[^a-z0-9_]%' |
| 28 | BEGIN |
| 29 | SET @Wert = '' |
| 30 | SET @Wert = '** ERROR - Unzulässiges Schlüsselwort! **' |
| 31 | END |
| 32 | |
| 33 | RETURN @Wert |
| 34 | END |
have fun
Facebook
XING
META-SQL