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.