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

Problema de SQL injection ayuda limpiar bbdd

Estas en el tema de Problema de SQL injection ayuda limpiar bbdd en el foro de SQL Server en Foros del Web. Buenos días, Ha venido a mi un cliente con un desarrollo antiguo y del cual no tiene copia de seguridad de la bbdd, en el ...
  #1 (permalink)  
Antiguo 04/11/2008, 03:27
Avatar de bossm4  
Fecha de Ingreso: noviembre-2005
Ubicación: Torrelodones, España
Mensajes: 92
Antigüedad: 18 años, 5 meses
Puntos: 0
Problema de SQL injection ayuda limpiar bbdd

Buenos días,

Ha venido a mi un cliente con un desarrollo antiguo y del cual no tiene copia de seguridad de la bbdd, en el cual ha recibido un ataque por SQLinjection.

La bbdd es SQLServer y no tiene copia de seguridad. Para poder limpiar la bbdd se me ocurre leer todos los campos uno a uno con un script y limpiar la cadena de texto que le ha incrustado.

Pero tengo la siguiente duda: Hay algún script ya hecho que permita este tipo de limpieza? Si no lo hay, hay alguna función que me permita leer todos los campos de una bbdd SQLServer de una tacada y guardarlos en un array o algo asi?

Muchas gracias
__________________
Madrid - Zaragoza - Sevilla | www.hucaconsulting.es | Desarrollo gráfico y web a medida
  #2 (permalink)  
Antiguo 04/11/2008, 04:44
Avatar de bossm4  
Fecha de Ingreso: noviembre-2005
Ubicación: Torrelodones, España
Mensajes: 92
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema de SQL injection ayuda limpiar bbdd

Me respondo a mi mismo por si le puede servir a alguien:

Entramos al SQLManager y en la bbdd en cuestión creas estos dos procedimiento almacenados

Código:
create PROCEDURE FindReplace
 (
 @TABLE  VARCHAR(200),
 @Field  VARCHAR(200),
 @WHERE VARCHAR(100),
 @Find  VARCHAR(500),
 @REPLACE  VARCHAR(500)
 )
 AS
 DECLARE @query VARCHAR(8000)
 SET @query  = 'UPDATE ' +  @TABLE +
               ' SET '+  @Field + '= REPLACE(CONVERT(varchar(8000),'
               + @Field + '),''' +  @Find + ''',''' + @REPLACE  +''')'
 IF(@WHERE <> '')
         SET @query = @query + ' WHERE '+@WHERE
       
 EXECUTE (@query)
 GO



create Procedure RemoveStringFinal
 @FIND  VARCHAR(500),
 @REPLACE  VARCHAR(500)

as

DECLARE @TABLE_NAME VARCHAR(500)
DECLARE @COLUMN_NAME VARCHAR(500)
DECLARE @DATA_TYPE VARCHAR(500)
DECLARE db_cursor CURSOR FOR
  select  TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE

WHILE @@FETCH_STATUS = 0 
BEGIN 
       if @DATA_TYPE = 'varchar' or @DATA_TYPE = 'text' or @DATA_TYPE = 'ntext' or @DATA_TYPE = 'nvarchar'
          begin

     print @TABLE_NAME
            print @COLUMN_NAME
     print @DATA_TYPE
  
              EXEC FindReplace @TABLE_NAME,@COLUMN_NAME,'',@FIND,@REPLACE 

          end
      

       FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE
END 

CLOSE db_cursor 
DEALLOCATE db_cursor
Una vez creados ejecutas el segundo del el SQLManager y te pedira la cadena que quieres borrar y cual quieres poner en su lugar. En cuestión de segundos tienes la bbdd limpia.
__________________
Madrid - Zaragoza - Sevilla | www.hucaconsulting.es | Desarrollo gráfico y web a medida
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 07:08.