Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Crear un trigger para todas las tablas mediante procedimiento almancenado

Estas en el tema de Crear un trigger para todas las tablas mediante procedimiento almancenado en el foro de SQL Server en Foros del Web. Buenos días. Nuevamente he sido atacado mediante inyección SQL. Hice varias comprobaciones después de la última infección para cerrar "agujeros" pero algo se me debió ...
  #1 (permalink)  
Antiguo 02/12/2009, 06:08
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Crear un trigger para todas las tablas mediante procedimiento almancenado

Buenos días. Nuevamente he sido atacado mediante inyección SQL. Hice varias comprobaciones después de la última infección para cerrar "agujeros" pero algo se me debió colar y, aunque ahora han tardado más, al final lo han conseguido. Bueno, al tema, mi intención es aplicar un filtro directamente sobre la base de datos, además de los que ya tengo en la apliación web.

Tengo un trigger para impedir la inyección en una tabla concreta y en una columna completa, pero me gustaría extenderlo a todas las tablas y a todas las columnas. También tengo un procedimiento para recorrer todas las tablas y columnas y me gustaría unir ambas cosas, es decir, crear un procedimiento que aplique un trigger a todas las tablas y columnas.

Por un lado el trigger de filtro:
Código:
LTER TRIGGER DISP_una_de_las_tablas 
   ON  una_de_las_tablas 
   AFTER INSERT, DELETE, UPDATE
AS 
BEGIN
	IF @@ROWCOUNT=0   
	BEGIN
		RETURN
	END
	DECLARE @headline varchar(350)
	SET @headline = (SELECT una_de_las_columnas FROM inserted)
	IF(CHARINDEX('<iframe',@headline))>0
	BEGIN
		ROLLBACK TRANSACTION
	END
	IF(CHARINDEX('<script',@headline))>0
	BEGIN
		ROLLBACK TRANSACTION
	END
END
Y por otro el procedimiento para recorrerlo todo:
Código:
ALTER PROCEDURE PA_RecorreTablasColumnas
AS
DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND b.xtype=99
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
	EXEC('SELECT ['+@C+'] FROM ['+@T+']')
END
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
La idea es sustituir la línea remarcada por la creación del disparador para esa table concreta y verificando todas las columnas de la misma.

O bien, si es posible, tener un sólo trigger que verifica todas las actualizaciones de todas las tablas.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 02/12/2009, 07:22
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Crear un trigger para todas las tablas mediante procedimiento almancenado

Se me olvidaba. Es SQL Server 2000 Std. Ed. SP4, o sea, que CREATE TRIGGER ON ALL SERVER no funciona.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:41.