Home > SQL-Server 2005 > SQL Injection – Schnelltest

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 :)

KategorienSQL-Server 2005
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks